2011-08-03 2 views
3

Entity Framework에서 관련 개체를 일부 기본값으로 반환하도록하려면 어떻게합니까?

public class Project 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<Task> Tasks { get; set; } 
    } 

    public class Task 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public int ProjectId { get; set; } 
     public bool IsDeleted {get; set;} 
     public virtual Project Project { get; set; } 
    } 

내가

public void SomeAction() 
{ 
Project p= repository.GetById(1); 
var tasks = p.Tasks; 
//var tasks = p.Tasks.Where(t=>t.IsDeleted==false); 
} 

내가 프로젝트 클래스 내 작업 속성은 항상 isDeleted를 그냥 반환에 해당 필터를 수행 할 것을 싶습니다 말해봐 내가 프로젝트 및 작업 EF 코드 첫 수업을 말 그 하위 집합 ... 그 곳곳에 그 상태를 써야하는 것을 피하십시오 ...

어떤 권고?

편집 :

임 모델 디자이너에서 EF 코드 먼저

답변

3

EF 코드 first = NO WAY. EDMX에서 사용할 수있는 긴 기능 목록 중 하나 일 뿐이며 코드에서 처음으로 빠져 있습니다. EDMX의 매핑 된 조건은이 작업을 수행하지만 하드 코딩되어 변경 될 수 없기 때문에 여전히 문제가 있습니다 (다른 EDMX를 사용하지 않는 한 원하는 경우에도 삭제 된 항목을로드 할 수 없음). 해결책은 EF에서 전역 필터를 구현하는 것이지만 EF는 오래된 Linq와 엔티티가 관계 (DataLoadOptions.AssociateWith) 이상을 가지고 있음에도 불구하고 이와 같은 것을 갖지 않습니다.

삭제 된 항목을 응용 프로그램에로드하지 않고 열망하거나 느린 로딩을 사용하거나 응용 프로그램의 메모리에서 필터링하지 않으면 관계가 훨씬 어려워집니다.

1

, 당신의 작업 개체를 선택하고 매핑 세부 정보 창을 불러 사용. 엔티티가 매핑 된 데이터베이스 테이블과 모든 열이 표시되어야합니다. '[YourTable]에 매핑'이라고 표시된 바로 아래에 <Add a Condition> 옵션이 표시되어야합니다. 이것은 당신이 찾고있는 것과 같은 조건을 설정하게합니다.

+1

감사합니다. 나는 EF 코드를 사용하여 Im을 명확히해야합니다. 4.1 – ignaciofuentes

+0

자동 속성을 사용하는 대신 공용 속성에 할당 된 개인 변수를 사용할 수 있습니다. 개인 변수에는 기본값이 할당됩니다. – Brownman98

5

OnModelCreating 방법

modelBuilder.Entity<TEntity>().Map(m => m.Requires("IsDeleted").HasValue(false)); 

주의 사항 당신이 다른 기업에 충실 isDeleted를하는지도 않는

  • 당신이 할 수있는 더 이상 부하 삭제 된 항목은 (다음 월에 모델에 판별 추가 자동 필터링 기능 제외)
  • poco 클래스에는 IsDeleted 속성을 사용할 수 없습니다 (식별자는 매핑 할 수 없음)
  • IsDeleted를 매핑 할 수 없기 때문에 원시 SQL을 실행하여 처음 엔 엔티티를 삭제해야합니다.
+1

''poco 클래스는 IsDeleted 속성을 가질 수 없습니다 (판별자를 매핑 할 수 없습니다)'에 대해 더 자세히 설명 할 수 있습니까? –

관련 문제