2013-02-20 13 views
5

this pageによれば、メソッド内でSelectを使用することにより、エンティティフレームワークは複数のレベルを熱心に読み込む必要があります。エンティティフレームワークEager複数レベルの読み込み例外

私は、次のコードを持っている:

var reports = _context.Reports 
    .Include(rt => rt.Fields) 
    .Include(rt => rt.Fields.Select(f => f.FieldType)) 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 

しかし、これはInvalidOperationExceptionスロー - などが第二の呼び出しに「表現の無効なタイプを」。例外はEntityFrameworkHelper.CollectRelationalMemebersから来ています。

私もInclude関連のプロパティに文字列を使用してみましたが、それは(すべてで可能ならば、私はむしろ、文字列の使用を避けるだろう)にも失敗しました。

私は、.NET 4.0のEF 5.0 DLLを使用しています。私のEFクラスは古くからのデータベースで、最初はEntityObjectです。私はこの例外について何かできることがあるかどう

誰もが原因を知っているとしていますか?

EDIT:

文字列バージョンを使用して:

var reports = _context.Reports 
    .Include("Fields") 
    .Include("Fields.FieldType") 
    .Include("Fields.FieldType.FieldIdentifier")); 

それはInvalidOperationExceptionスロー - 式の型が無効です。

+0

正確な例外メッセージとは何ですか? – Slauma

+0

上記の回答を参照してください。 – MgSam

+0

私は**文字列**のベースバージョンの 'Include'の例外を意味しました。 – Slauma

答えて

0

問題は、私たちが使用していたDLLでサードパーティInclude拡張メソッドは、Entity FrameworkののIncludeよりも優先を得ていたということになりました。第三者が例外を投げていた。削除後、問題は解決されます。拡張メソッドの問題点の

ワン...ヘルプ皆のため

感謝。あなたは `Include`の文字列ベースのバージョンを使用する場合

19

あなたは冗長含まれています。最後のインクルードだけが必要です。このインクルードには、そのパスに何かが含まれます。例:

var reports = _context.Reports 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 
関連する問題