이 질문의 두 번째 단계는 here (EF 4.1 code-first: How to load related data (parent-child-grandchild)?)입니다. @Slauma 님의 안내에 따라 데이터를 검색 할 수있었습니다. 그것은이 데이터베이스에 대해 많은 쿼리를 전송하고 나는 모든 하나 개의 쿼리에서이 작업을 수행 할 수있는 방법을 검색하고, 작동하지만EF 4.1 코드 우선 : 포함 및/또는 선택 방법을 사용할 때 탐색 속성을 주문하는 방법?
var model = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order) // ordering parent
.ToList();
foreach (var child in model) { // loading children
DbContext.Entry(child)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering children
.Load();
foreach (var grand in child.Children) { // loading grandchildren
DbContext.Entry(grand)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering grandchildren
.Load();
}
}
: 내 첫 번째 코드는이이었다. (예 : 첫 번째 코드 위와 같이) 이제
var model2 = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order)
.Include(p => p.Children // Children: how to order theme???
.Select(c => c.Children) // Grandchildren: how to order them???
).ToList();
, 어떻게 주문할 수 있습니다 어린이들 (손자) 그들에게 선택 : @Slauma의 지침으로 나는이 하나에 쿼리를 변경 (위의 링크에 설명)?
이 질문을보십시오. http://stackoverflow.com/questions/4156949/ef4-linq-ordering-parent-and-all-child-collections-with-eager-loading-include. 당신이하려고하는 것은 "eager loading"이라고 불리고, 분명히 당신은'OrderBy'를'Include'와 함께 사용할 수 없습니다. – devuxer
예, 열심히로드하는 방법에 대해 알고 있습니다. (내 자신이 만든) 첫 번째 코드를 보면 각 수준의 각 개체에 foreach 문을 사용하는 것을 볼 수 있습니다 (자식에 대해서는 맨, 손자에게는 자식). 당신의 준비된 링크에 대해 설명했다. 그러나 이것은 데이터베이스에 대해 더 많은 쿼리를 필요로합니다! 나는 하나의 쿼리에서이 모든 것을 수행하는 방법을 찾고있다. –
전체 구조를 열망 할 수 있습니까? 그런 다음 필요할 때 뷰에서 순서를 지정할 수 있습니까? 데이터 액세스 논리에서 프리젠 테이션 논리 (순서 지정)를 누출해야하는 이유는 거의 없습니다. –