문제

필요한 엔티티 트리를로드하기위한보다 체계적인 접근 방식을 만들고 싶습니다.

심각한 양의 데이터가 필요하므로 유형-안전한 포함을 사용 하여이 작업을 수행합니다 (정상적인 포함이지만 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가 호출 결과를 반환하는 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top