2016-11-18 3 views
1

ここでは、特定の条件を満たす単一のエンティティオブジェクトと1つのネストされたエンティティをフェッチするクエリがありますが、ここで.includeを使用してネストされたオブジェクトをフェッチするときにEntity Frameworkのスローエラーが発生する

は、クエリ

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true)).First(); 

そして、ここでは、インクルードパス式はタイプに定義されたナビゲーションプロパティを参照する必要があります例外エラーメッセージ

です。参照ナビゲーションプロパティには点線のパスを使用し、コレクションナビゲーションプロパティにはSelect演算子を使用します。 パラメータ名:パス

私はまた、別の1次回()でそれを実行してみましたが、それでも同じエラーメッセージ

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true).First()).First(); 

答えて

2

あなたはInclude内の関連企業をフィルタリングすることはできません、あなたがしようとしていますあなたが投影を行う場合、それはあなたのデータベースへの唯一の1往復になります

Profile profile = dbContext.Profiles 
          .Where(i => i.ApplicationUserGuid == guiId) 
          .First(); 
dbContext.Entry(profile) //Explicit Loading 
     .Collection(b => b.ProfileImages) 
     .Query() 
     .Where(k => k.IsMainImage == true).Take(1) 
     .Load(); 

、あなたはexpliを使用する場合:期待される結果とクエリを投影したりexplicit loadingを使用する必要がありますそれをロードするcitは2つになります。

プロジェクトを匿名型またはDTOに投影すると思われる場合に備えて、ちょっと参考にしてください。詳細情報here

+0

私はあなたの明示的な読み込みの例とその動作に従っていますが、where条件を満たすものだけでなく、すべての入れ子のエンティティを返しています! – user1186050

+0

私は自分の答えを編集しました。「Take」メソッドはそれを修正する必要があります – octavioccl

+0

私はまだ1を除いてすべての画像が返されている理由は少し不明です。次に、どこの条件の目的は何ですか?それが動作していない場合は?私はTake(1)を試みましたが、それでもすべての画像を返します! – user1186050

関連する問題