1-0..1 の関係を持つ A と B の 2 つのテーブルがあるとします。私はアダプターアプローチを使用します。A エンティティのコレクションを 1 か所にロードしてから、関連するすべての B エンティティを後ですべての A エンティティにロードする必要があります。Prefetch を使用しない理由は、ほとんどの場合、B エンティティをロードする必要がないからです。
どこでも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 つのグラフを 1 つのグラフに統合します。
LINQ to Objects を使用して 2 つのコレクションを結合できますが、それはエレガントではありません。さらに、両方のコレクションに相互接続を確立する必要がある複雑なグラフが含まれている場合、これははるかに複雑になる可能性があります。
B から A へのプリフェッチを記述できますが、これは完全に不要な 1 つの余分な DB クエリです。
これらの 2 つのグラフをマージする簡単な方法はありますか?