8

私はちょうど大規模な*金髪の瞬間**を経験しましたが、それは私がEntityFrameworkで抱えている煩わしさを浮き彫りにしました。遅延読み込みを無効にしているので、アプリケーションをできるだけ高速に保つために必要なデータについて実際に考えなければなりません。

したがって、クエリ内でデータを返すには、次のIncludeメソッドを使用する必要があります。

var query = from item in context.Customers
                .Include(x=> x.Orders)
            select item

これは、階層のもう少し深い項目を選択するまでは問題ありません。すなわち:

Customer 1-* Orders *-1 Factory 1-1 Factory Type

私の知る限り、このすべてのデータを熱心に返す唯一の方法は、次のことを行うことです。

var query = from item in context.Customers
                .Include("Orders.Factory.FactoryType")
            select item

System.Data.Entity上記では、最初の例のようにラムダを利用できません。ここで明らかな何かが欠けているかどうか、またはコレクションを介してナビゲーションプロパティに文字列宣言を使用することに固執しているかどうかを誰かが知っていますか?

コレクションがない場合は、次のように書くことができます。

.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother

しかし、Ordersコレクションがあるため、私が知る限り、子プロパティにステップスルーする方法はありません(、、FirstOrDefaultなどSingleOrDefaultは機能しません)。


**それは言い換えです、私はたまたま金髪がとても好きです*

4

1 に答える 1

14

EntityCollectionsを含めるには、Selectメソッドを使用します。

var query = from item in context.Customers
           .Include(c => c.Orders.Select(o => o.Factory.FactoryType))
           select item

これは、標準のObjectQuery <T> .Includeメソッドのオーバーロードではなく、EFCTP4に付属するObjectQuery <T>クラスの単なる拡張メソッドであることに注意してください。

于 2010-09-24T02:05:13.750 に答える