2012-10-24 2 views
3

먼저 모든 관계 개체를 메모리에로드하지 않고 다 대다 관계를 쿼리하는 가장 좋은 방법을 알고 싶습니다.Entity Framework 코드 우선 : 메모리에로드하지 않고 많은 탐색 속성으로 쿼리하기

예를 들어 카테고리 및 아티클은 다 대다 관계입니다. 내가 볼 수 있습니다 만 제품을 선택합니다

class Category 
{ 
    public long Id {get; set;} 
    public ICollection<Articles> Articles {get; set;} 
} 

, 나는과 같이 탐색 속성을 조회 할 수 있습니다 :

category.Articles.Where(a => a.IsVisible) 
이 내 카테고리 클래스로 그래서 (게으른로드) 탐색 속성이 의미

그러나 알고있는 한 IsVisible 검사를 수행하기 전에 관련 기사가 모두 메모리에로드됩니다.

관련 아티클을 메모리에로드하지 않고 쿼리 할 수 ​​있습니까? 즉 ICollection이 아닌 IQueryable에서 작동 할 수 있습니까? 이 일대 다 관계라면 나는 DbSet를 직접 질의하여 DbSet을 사용하여 쿼리를 수행 할 수 있었지만 많은 관계가 SQL의 링크 테이블에 저장되어 DbSet을 사용하여 쿼리 할 수 ​​없었습니다. 링크 테이블을 쿼리 할 원시 SQL을 수동으로 작성하는 유일한 방법은 무엇입니까? 예를 들어, Contains를 사용하여,

var visibleArticlesQuery = context.Category.Where(c => c.Id == category.Id) 
              .SelectMany(c => c.Articles) 
              .Where(a => a.IsVisible); 

그것은 제 DbSet를 조회 할 수도 있습니다

답변

6

여기에 하나의 방법입니다.

+0

완벽하게 작동합니다. 감사합니다. – chrisn