6

さて、このページによると、Entity Frameworkは、メソッドSelect内を使用して複数のレベルを熱心にロードする必要があります。Include

私は次のコードを持っています:

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は2番目のインクルードの呼び出しで-「無効なタイプの式」をスローします。例外はから来ていEntityFrameworkHelper.CollectRelationalMemebersます。

また、関連するプロパティに文字列を使用しようとしIncludeましたが、それも失敗しました(可能な限り文字列の使用は避けたいと思います)。

EF 5.0 DLL for.NET4.0を使用しています。私のEFクラスは、昔ながらEntityObjectのデータベースファーストです。

誰かが原因を知っていますか、そしてこの例外について私ができることがあれば?

編集:

文字列バージョンを使用する場合:

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

スローInvalidOperationExceptionします-無効なタイプの式。

4

2 に答える 2

20

冗長なインクルードがあります。最後のインクルードのみが必要です。これには、そのパスに含まれるものがすべて含まれます。例:

var reports = _context.Reports
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier));
于 2013-02-20T20:44:35.323 に答える
0

問題は、私たちが使用していたDLLのサードパーティのInclude拡張メソッドがEntityFrameworkのよりも優先されることでしたInclude。サードパーティのものは例外を投げていました。それを削除した後、問題は解決されました。

拡張メソッドの問題の1つ...

みんな助けてくれてありがとう。

于 2013-02-20T21:14:55.340 に答える