Linq-to-entities - Include()メソッドがロードされない

entity-framework linq

質問

私がjoinを使うと、Include()メソッドはもう動作しません。例えば:

from e in dc.Entities.Include("Properties")
join i in dc.Items on e.ID equals i.Member.ID
where (i.Collection.ID == collectionID) 
select e

e.Propertiesがロードされていません

結合がなければ、Include()は機能します。

リー

受け入れられた回答

更新:実際に私は最近これをカバーする別のヒントを追加し、そして代替のおそらくより良い解決策を提供します。アイデアは、クエリの最後までInclude()の使用を遅らせることです。詳細については、こちらを参照してください。 ヒント22 - 実際にインクルードする方法


Include()を使用する場合、Entity Frameworkには既知の制限があります。特定の操作はIncludeではサポートされていません。

あなたはこれらの制限の1つに遭遇したかもしれないように見えます、これを回避するためにあなたはこのようなことを試みるべきです:

var results = 
   from e in dc.Entities //Notice no include
   join i in dc.Items on e.ID equals i.Member.ID
   where (i.Collection.ID == collectionID) 
   select new {Entity = e, Properties = e.Properties};

これはPropertiesを呼び戻します、そしてentityとPropertiesの間の関係が一対多(多対多ではない)であるならば、あなたは結果として生じるそれぞれの匿名型が同じ値を持つことがわかります:

anonType.Entity.Properties
anonType.Properties

これは、リレーションシップの修正と呼ばれるEntity Frameworkの機能の副作用です。

詳細については、私のEF TipsシリーズのこのTip 1を参照してください。


人気のある回答

これを試して:

var query = (ObjectQuery<Entities>)(from e in dc.Entities
            join i in dc.Items on e.ID equals i.Member.ID
            where (i.Collection.ID == collectionID) 
            select e)

return query.Include("Properties") 


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ