문제의 마음의 열망 부하를 강제 할 수있는 방법에 대한 어떤 생각을위한
from A in _db.A
.Include(A=>A.B.OfType<B2>())
.Include(A=>A.B.OfType<B2>().Include(C))
select A
감사 Include(A=>A.B.OfType<B2>())
가 지원되지 않는 것입니다.
필자가 ADO.Net 팀을 이해한다면 부분적으로로드 된 하위 모음을 지원하지 않는 것으로 보입니다. (그리고 나는 그것들에 동의하는 경향이있다.) Linq-to-SQL에는 DataLoadOptions이 있었지만 EF와 동등한 것은 없다. 이는 B
의 콜렉션을 부분적으로로드하도록 EF에 지시 할 것이므로 이 OfType
인 이유를 설명 할 수 있습니다.
또한 확장 메서드 Include
은 IQueryable
개체 자체의 Include 메서드 (있는 경우) 주위의 래퍼입니다. ObjectQuery.Include
을 가져 오십시오 : 포함시킬 탐색 속성에 대한 경로가 포함 된 매개 변수 (DbQuery.Include
과 같음) (_db.A.Include("B")
)와 같은 문자열을 사용하는 아주 간단한 방법입니다. 즉, MemberExpression으로 해석 될 수있는 문자열 만 사용할 수 있습니다. 그리고 B.OfType<>()
이 방법입니다.
C
을 포함 할 수없는 이유를 설명하는 긴 이야기 : C
으로 이어지는 경로는 유효하지 않습니다.
당신 은
_db.B.OfType<B2>().Include(b => b.A).Include(b => b.C)
을 할 수 그러나 그것은 당신이 후했던 결과를 제공하지 않을 수 있습니다.
감사합니다. 잘 대답 했으므로 궁금한 점이 없으므로 문제를 해결하기 위해 많은 시간을 절약 할 수 있습니다. TPC 상속은 연관된 부분 클래스에서 많은 공통점을 재사용하는 데 사용되었지만 OfType 포함을 사용할 수 없기 때문에 대신 인터페이스와 확장 메소드를 구현해야한다고 생각합니다. – Brent