2013-03-14 2 views
0

내 테이블 관계 :EF 중첩 테이블은 열심히로드합니까?

Categories이 가지고 많은 Posts가 나는> LastPost> FirstPostImage을 카테고리를 검색 할 PostImages

많은. 그리고 다음과 같은 것을 시도했습니다 :

var categories = entity.Categories 
       .Where(x => x.PositionId == 2) 
       .Include(x => x.Posts.Last()) 
       .Include(x => x.Posts.Last().PostImages.First()) 
       .Take(5) 
       .ToList(); 

질문 : 우아한 방법이 있나요? 일반적으로 중첩 관계형 테이블에 대한 eager 로딩 사용이 있습니까?

답변

2
포함 된 테이블에

EF 넣은 사람은 아니다 지원 쿼리를,하지만 당신은 하위 쿼리에 대한 Select 절 사용할 수 있습니다

var categories = entity.Categories 
    .Where(x => x.PositionId == 2) 
    .Select(x => new { 
    Category = x, 
    LastPost = x.Posts.Last(), 
    FirstImage = x.Posts.Last().PostImages.First(), 
    }) 
    .Take(5) 
    .ToList(); 

당신은 List<anonymous>으로 끝날 것이다 그러나 그것은 (단지)를 얻을 것이다 데이터를 필요한 것.

1

데이터 전송 개체 (DTO)를 사용하는 것이 좋습니다.

public class CategoriesPostPostImagesDto 
{ 
    public Categories Category {get;set;} 
    public Posts Post {get;set;} 
    public PostImages PostImage {get;set;} 

} 

그런 다음 DB에서 데이터를 선택하십시오. 이 같은

: ADO.NET EF - populate DataGridView when we have Foreign Key

인터넷에서 DTO에 대한 많은 정보가있다

List<CategoriesPostPostImagesDto> data = entity.Categories 
    .Where(x => x.PositionId == 2) 
    .Select(x => new CategoriesPostPostImagesDto(){ 
    Category = x, 
    Post = x.Posts.Last(), 
    PostImage = x.Posts.Last().PostImages.First(), 
    }) 
    .Take(5) 
    .ToList();