엔티티 프레임 워크가있는 열망하는 로딩 집계 루트
-
13-09-2019 - |
문제
필요한 엔티티 트리를로드하기위한보다 체계적인 접근 방식을 만들고 싶습니다.
심각한 양의 데이터가 필요하므로 유형-안전한 포함을 사용 하여이 작업을 수행합니다 (정상적인 포함이지만 Lambda 's). 여기에 표시된대로.
내가 말했듯이, 나는 많은 데이터가 필요합니다. 기본적으로 1 부모 항목 아래 전체 엔티티 트리가 필요합니다.
이제 다음과 같은 일을 할 수 있습니다.
context.House
.Include(x => x.Doors)
.Include(x => x.Doors.FirstOrDefault().Joint)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
.Include(x => x.Windows)
// ... same thing
.Include(x => x.Roof)
// ... same thing
보시다시피, 포함 된이 라인은 상당히 커질 수 있습니다. 이것은 실제로 실제 코드의 매우 단순화 된 샘플입니다 (주택 BTW는 포함되지 않음)
그래서 내가하고 싶은 것은 나무에있는 가지를 책임지고있는 방법을 만드는 것입니다. 이 방법이 객체 쿼리를 수락하고 자식을 포함 할 수있는 경우, 차례로 "Child-Loader 방법"을 호출하십시오. 또한, 부모는 자녀의 유형이있는 재산이있는 한 중요하지 않아야합니다.
이것은 아마도 의미가 없을 것입니다.
public void LoadHouse(int id)
{
// ...
ObjectQuery<House> query = context.House;
// and now?
LoadDoors(query, x => x.Door);
}
public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
// ... ?
LoadJoints(...)
}
등등. 그러나 나는 실제로 머리를 돌릴 수 없습니다 ... 들어오는 쿼리와 어린이 방법에 대한 링크가 누락되어 있습니다.
이런 일을 한 사람이 있습니까? 아니면 누구든지 나에게 약간의 포인터를 줄 수 있습니까?
해결책
대신 이와 같은 것을 시도하십시오.
query = loaddoors (query, x => x.door);
LoadX가 호출 결과를 반환하는 경우.
제휴하지 않습니다 StackOverflow