1-0..1 관계의 A와 B 테이블이 2 개 있다고 가정 해 봅시다. 나는 Adapter 접근법을 사용한다. 한 곳에서 A 엔티티 컬렉션을로드 한 다음 나중에 모든 A 엔티티에 대해 관련된 모든 B 엔티티를로드해야합니다. Prefetch를 사용하지 않는 이유는 대부분의 경우 B 엔티티를로드 할 필요가 없기 때문입니다.LLBLGen에서 엔티티 그래프를 병합하는 방법은 무엇입니까?
나는 어디에서나 LINQ를 사용하므로 같은 방식으로하고 싶습니다.
코드
나는 같은 외모를 작성하는 것을 시도하고있다 :var linqMetadata = new LinqMetaData(adapter)
{
ContextToUse = new Context()
};
var aCollection = linqMetadata.A.Where(/*some filter*/).ToList();
// ...
var bIds = aCollection.Select(x => x.BId);
var bCollection = linqMetadata.B.Where(x => bIds.Contains(x.BId)).ToList();
문제는 bCollection
및 aCollection
즉, 연결되지 않은 유지 모든 A
단체가 반대 B = null
등을 가지고있다. 나는이 참조들이 설정되기를 원하며, 따라서 2 개의 그래프가 하나의 하나로 통합되기를 바랍니다.
LINQ to Objects를 사용하여 2 개의 컬렉션을 결합 할 수는 있지만 그다지 우아하지는 않습니다. 그리고 두 컬렉션에 상호 연결이 필요한 복잡한 그래프가 포함되어 있으면 훨씬 더 복잡해 질 수 있습니다.
B에서 A로 프리 페치를 쓸 수 있지만, 이는 완전히 불필요한 추가 DB 쿼리입니다.
이 두 그래프를 병합하는 쉬운 방법이 있습니까?
컬렉션이 "연결 해제 상태를 유지"한다는 것은 무엇을 의미합니까? 테이블 B의 항목을 선택합니다.이 ID는 테이블 A의 필터링 된 버전에있는 레코드로 참조됩니다. 정확히 달성하고자하는 항목은 무엇입니까? – kol
두 번째 쿼리의 마스터 레코드 (A)에 프리 페치 경로를 추가 할 수 있습니까? 나는 그것을 시도하지는 않았지만 질의하지 않고 컨텍스트에서 A 레코드를 얻을 수 있다고 생각합니다. –
@kol .NET 엔티티 사이의 참조가 ID를 기반으로 자동으로 설정되기를 원합니다. 결국 모든 A 엔티티는 non-null'B' 속성을 가지며 그 반대도 마찬가지입니다. 방금 2 개의 쿼리를 실행하면 그렇지 않습니다. 그리고 이것은 llblgen과 EF와 같은 다른 ORM 사이의 큰 차이점 중 하나입니다. –