Linq-to-entities - Include()方法未加載

entity-framework linq

如果我使用連接,則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真正包含


使用Include()時,實體框架存在已知限制。 Include不支持某些操作。

看起來你可能已經碰到了這些限制,要解決這個問題你應該嘗試這樣的事情:

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};

這將返回屬性,如果實體和屬性之間的關係是一對多(但不是多對多),您會發現每個生成的匿名類型具有相同的值:

anonType.Entity.Properties
anonType.Properties

這是實體框架中稱為關係修正的功能的副作用。

有關詳細信息,請參閱我的EF提示系列中的 提示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") 


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因