2011-10-01 5 views
0

EF4.1을 좋아하지만이 작업을 계속해야합니다!Entity Framework 4.1 getter 유지하기

EF가 두 속성을 모두 처리하는이 클래스로 끝내기를 원합니다. 둘 다 데이터베이스에 있습니다.

public class myClass 
{ 
    public int priority { get; set; } 
    public string status { get { return priority > 10 ? "Low" : "High" } } 
} 

1) 데이터베이스에서 모델을 생성 할 때 어떻게 든 상태 계산을 해당 속성에 삽입해야합니다.
2) 데이터베이스에서 모델을 다시 생성하면 솔루션이 작동되기를 바랍니다.

답변

0

이러한 속성은 유지할 수 없습니다. 비즈니스 논리 (계산 된 특성)입니다. EF가 데이터베이스에서로드 된 실체를 구체화 할 때 EF가이를 설정하려고 시도하기 때문에 setter가 있어야합니다. 그러나 setter를 노출 시키면 getter가 이해되지 않고이 논리를 다른 곳으로 이동해야합니다.

편집 :

해결 방법은 도우미 확장 방법으로 Status 로직을 래핑하는 것입니다 :

var query = from x in context.MyClasses.IsHighPriority() 
      where ... 
      select x; 
+0

흠 :

public static IsHighPriority(this IQueryable<MyClass> query) { return query.Where(x => x.Priority > 10); } 

이제 당신은 같은 쿼리에서 사용할 수 있습니다. 필자는 비즈니스 계층이 IQueryable을 얼마나 멀리 밀어 올릴 것인지에 대한 관점에서 접근했습니다. IQueryable에서 status 속성을 사용하면 데이터베이스에 필드가 없으므로 오류가 발생합니다. 따라서 DB에 저장하려는 욕구가 있습니다. 이것이 허용되지 않는다면, 나는 종종이 로직을 EF가 처리 할 수있는 Computed Columns로 데이터베이스에 넣는 것을 보았습니다. 그러나 귀하의 주장에 따라 비즈니스 로직을 DB에 넣는 것은 훨씬 더 어려울 것입니다. 당신은 "다른 곳에서"괴롭히는, 어떤 제안을 남겼습니까? – DNeedy

+0

제안을 추가했습니다. –

관련 문제