2017-08-24 7 views
1

EF 6と、私はこのように質問していて、うまくいきました。EFコア複数レベルの問題を含む

IQueryable<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .Include(x => x.Subjects.Select(y => y.Category)); 

問題: 同じことがEFコア2.0では動作しません。

エラー

System.ArgumentExceptionのはHRESULT = 0x80070057がメッセージ= プロパティ式生じ '被験者=> {被験者の被験者yから [Y] .Category選択}' は有効ではありません。式は、 't => t.MyProperty'というアクセス のアクセスを表す必要があります。 関連データの追加の詳細については、http://go.microsoft.com/fwlink/?LinkID=746393を参照してください。

このようにリファクタリングされていますが、まだ動作しておらず、同じエラーが表示されます。

List<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .ThenInclude(Subjects => Subjects.Select(y => y.Category)).tolist(); 

問題はどこですか?

答えて

6

ThenIncludeの最後のチェーンを間違って使用しています。以下のコードのように使用してください。このThenInclude拡張メソッドで

List<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .ThenInclude(subject => subject.Category); 

は、あなたがあるため、その型のコレクションを扱うインクルードの使用の最後の Subjectのインスタンスを扱っています。

+1

私はこの方法を知っていましたが、テストするのは怠惰でした。あなたは奇妙なことを知っていますカテゴリは、件名の後にドットを書くときには表示されず、すべてのコレクションに関連するすべてのものが表示されます..なぜ、私は他の方法で働いていませんでした。とにかく感謝します。 – simbada

+2

@simbada私は、 'ThenInclude'を実行している間も、Visual Studio上でそのバギーintellisenseの動作を実験しました。 –

+3

両方のオーバーロードが式であり、Intellisenseがどちらを選択するかわからず、エンティティ上でコレクション(以前に選択されたナビゲーションプロパティ)を常に選択するためです – Tseng

関連する問題