基本的には、1つの要求でエンティティの関連するコレクションを取得する最も簡単な方法を探しています。エンティティフレームワークは1回のリクエストで複数のコレクションを読み込みます
using (var context = new DbContext())
{
context.Users.Attach(user);
context.Entry(user)
.Collection(f => f.Followers)
.Query()
.Where(x => x.Whatever)
//.Collection(r => r.Requests) doesn't work
//.Collection(b => b.Blocks) doesn't work
.Load();
}
これらを3つの異なるリクエストに分割することができますが、私はdbへの1回のトリップしか望んでいません。
代わりに私はこれをやってのけることができた:
var user = context.Users
.Include(f => f.Followers)
.Include(r => r.Requests)
上記のアプローチの問題は、私は.Where句に含めるにコレクションをフィルタリングすることができないよです。 EF 6 filtering child collections
と同様に:
この質問は非常に多くある一つのリクエストで引っ張っすることができたどちらも Entity Framework Query multiple collections
ので、私はその可能性はないと推測していますか?
関連するエンティティを1回の往復でフィルタリングしたい場合は、期待される結果でクエリを投影する必要があります – octavioccl
実際には、1つのSQL(db trip)を使用して、複数の子コレクションを 'Include'のように返します返された結果セットは、共用フィールドを持つすべての子レコードのデカルト積でなければならないので(大部分は 'null'です)、別々のラウンドトリップを使用するよりもはるかに非効率です。あなたが何とかそれを働かせることができたとしても、そうしないでください。 –
@octaviocclあなたは精巧にできますか? –