Entity Framework 4のIncludeとラムダ式の使用


88

この問題を克服する方法について、CTP4に関連する記事や、独自の拡張メソッドを追加する記事をたくさん見ました。

include内でラムダ式を使用する "公式の" EF4組み込みの方法はありますか(最初のレベルの関係と2番目以上のレベルの両方)、または最終的にRTMに含まれなくなりましたか?

それが1つあります。コードでラムダ式を(#system.data.entity#system.data.linqを使用して)使用しても、次のようになるため、その方法を学ぶことができればうれしいです。

ラムダ式はデリゲート型ではないため、 'string'型に変換できません:

var customers = from c in
context.Customers.Include(c=>c.Phone)

1
いいえ、それは存在しません(CTP4を除いて-あなたが言うように)。タイプセーフティを実現するために、拡張メソッド/列挙型を使用しています。
RPM1984

私もそれをしたので、MSはCTP4にそれを含め、RTMでそれを削除しましたか?
ダニ

回答:


229

Entity Framework 4.1のRTMバージョンでは、実際には、関数を介してラムダで積極的にロードするための拡張メソッドEntityFramework.dllファイルに含まれていIncludeます。プロジェクトにDLLを含めるだけで、次のようなコードを記述できます。

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

System.Data.Entity名前空間を含めるには、必ず Import / Usingステートメントを追加してください。そうしないと、コンパイラーは拡張メソッドを見つけることができません。例えば:

using System.Data.Entity;

詳細については、このADO.NETチームのブログ記事を参照してください。


1
:ADO.netのブログへのリンクがまだ関連ですが、同じトピックのEF6リファレンス/ガイドがあるロード関連企業は、彼らが使用してきた私は、ブログの代わりに姫とユニコーン例にスイッチへのドキュメントのニーズを考えるとポストどこにでも。
Arkaine55 2015

1
おかげで、私はSystem.Data.Entityを使用して追加するだけです。その仕事私。
adnan 2017年

チームのブログリンクは
無効

89

これは質問で暗示されていますが、.Includeでラムダを使用できない同じ問題を抱えている他の人は、次のことを確認してください:

using System.Data.Entity;

5

現時点では、RTMのラムダ式でインクルードするための公式サポートはありません。私はこれを使っています。

CTP4について話すときは、エンティティフレームワーク機能を意味します。EF4より新しいAPIです。主にコードファーストと他のいくつかの改善が含まれます。


MSがこの機能をサポートするのはいつですか?これらすべての拡張メソッドには、ラージ/マルチレベルのオブジェクトに関するパフォーマンスの問題があることを理解しています。インクルードを呼び出すたびに何度もトラバースする必要があるため、オブジェクトの「定義」ツリーは一定であり、キャッシュできますが、次のような解決策はありません。これはまだ。
ダニ

Entity Framework機能は現在CTP5にあります。RTMのバージョンは2011年の第1四半期に公開されると思います。したがって、これにはInclude with lambda式が含まれますが、実装をまだ確認していないため、どのような種類のキャッシングを使用しているかはわかりません。
Ladislav Mrnka、2010

31
この回答はEF 4.3.xでは間違っています。他の答えは正しいです。ラムダ式でオーバーロードを取得するには、System.Data.Entity使用する必要があります。
エリックJ.

1
@EricJ:はい。厳密に型指定されたインクルードは、EF 4.1以降で使用できます。
Ladislav Mrnka、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.