2012-04-21 3 views
0

DbContext/DbSet/DbQuery를 사용하여 조건부로 열심히 탐색 속성을로드 할 수 있습니까? 아래 쿼리는 특정 역할을 가진 당사자를 반환합니다.EF 코드 처음 4.3 조건부로 탐색 속성로드

필요한 항목은 추가로 일치하는 역할 만 추가하는 것입니다.

첫 번째 시도는

var peopleWithRole = (from p in Party 
    from r in p.Roles 
    where r.RoleTypeId == 1 
    select p).Include(_ => _.Roles); 

이 모든 역할을로드하고 당신이 그것을 보면 일단 이유는 명백하다.

나는 몇 가지 시도했다. 괜찮을 것 같은 객체 질의를 캐스팅하고 생성해야만한다면 어떻게 될지 알 수 없습니다.

두 번째 시도는

var objectContext = ((IObjectContextAdapter)this).ObjectContext; 
var set = objectContext.CreateObjectSet<Party>(); 
var result = (from p in set.Where("it.Roles.RoleTypeId == 1") 
       select p) 
; 
result.Dump(); 

반복자과 같이 사용할 수 없습니다?

아이디어가 있으십니까?

+0

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx – Jim

답변

0

열렬한 로딩을 통한 필터링 및 정렬은 지원되지 않습니다. 관계가 (있는 경우 일대 EF ("관계 픽스")는 각 Party 자동으로 필터링 된 Roles 수집을 채울 경우

var peopleWithRole = (from p in Party 
         select new 
         { 
          Party = p, 
          Roles = p.Roles.Where(r => r.RoleTypeId == 1) 
         }) 
         .ToList() 
         .Select(a => a.Party); 

: 하나의 왕복에 데이터를로드 할 수있는 유일한 방법은 투사입니다 변경 추적을 비활성화하지 마십시오). 관계가 many-to-many 인 경우 쉽게 작동하지 않으며 익명 객체의 결과 목록을 반환 한 후 컬렉션을 수동으로 채워야합니다.

마지막 옵션은 열혈적 로딩 필터링 기능을 여기에 투표하십시오 : http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015345-allow-filtering-for-include-extension-method ... 그리고 향후 EF 릴리스에서 구현되기를 바랍니다.

+0

결국이 결론에 도달했다. 그것을 확인해 주셔서 감사합니다. 나는 그들이 기능을 추가했으면 좋겠다. – Jim

+0

이것은 실제로 도움이 될 것 같습니다. 나는 그것을 확인하기 위해 시험 할 것이고, 나는이 링크를 발견했다. http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx – Jim

+0

@Jim : No 필터링은 열심히로드하는 것이 아니라 * 명시 적로드 * (= 2 개의 DB 쿼리)를 통해서만 가능합니다. 열망하는로드로 필터링하는 것은 EF 5 (베타)에서 사용할 수 없습니다. 우리는 여전히 기다려야합니다 ... – Slauma

관련 문제