2017-01-23 9 views
1

基本的には、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

ので、私はその可能性はないと推測していますか?

+0

関連するエンティティを1回の往復でフィルタリングしたい場合は、期待される結果でクエリを投影する必要があります – octavioccl

+2

実際には、1つのSQL(db trip)を使用して、複数の子コレクションを 'Include'のように返します返された結果セットは、共用フィールドを持つすべての子レコードのデカルト積でなければならないので(大部分は 'null'です)、別々のラウンドトリップを使用するよりもはるかに非効率です。あなたが何とかそれを働かせることができたとしても、そうしないでください。 –

+0

@octaviocclあなたは精巧にできますか? –

答えて

0

EFベースではサポートされていません。

あなたは nugetライブラリをEntityFramework.Extendedの例今後のクエリのために、3つの別々のクエリに分割し、1回のラウンドトリップでそれを行うには、いくつかの外部ライブラリを使用することができます。

関連する問題