2009-09-17 179 views
0

我有一個複雜的對象,當我使用沒有包含語法的linq查詢時,我仍然將所有相關實體返回到我的對象圖中。你可以解釋一下嗎?Linq to Entities - Eager Loading

回答

1

你不是真的。 Linq在你需要的時候加載對象,但是它只是在你開始瀏覽對象時(無論是在代碼中還是在調試器中)加載它們,所以它看起來好像你已經有了它們。

如果您執行查詢並終止與數據庫的連接,當您嘗試瀏覽對象時將會收到數據庫異常,因爲它將無法加載它們。

編輯:對不起,我誤讀了這個問題。 Linq-to-entities不支持延遲加載(請參閱下面的Craig評論)。要獲得完整的對象圖,您應該在Linq查詢中使用「Include」,或者在每個引用上調用Load()。對不起,我無法解釋問題中描述的行爲。你能否提供一些細節。也許發佈您的查詢和代碼。

+0

這個答案看起來好像是LINQ to Entities做延遲加載。也許這不是我想要的,但這就是我在這裏閱讀文本的方式。事實上,LINQ to Entities不會執行延遲加載(除非您使用的是版本4並專門啓用它)。沒有看到實際的查詢就很難說更多。 – 2009-09-17 14:13:39

+0

啊。好點,我剛剛看到Linq並認爲Linq-to-SQL(按照我的回答描述)。是的,你是對的Craig,Linq to Entities不會做懶惰加載。您必須使用「Include」或在引用上調用Load()。在這種情況下,我無法解釋問題中描述的行爲。 – 2009-09-17 14:51:52

+0

公平地說,很難說爲什麼查詢的行爲方式與未查看查詢的方式相同。 :) – 2009-09-17 15:53:35

0

也許你正在使用Entity Framework 4並且啓用了懶惰提示。你可以在你的上下文中檢查ObjectContextOptions.LazyLoadingEnabled屬性。雖然該屬性默認爲'false',但模型生成工具通常將其設置爲'true'。檢查MSDN article on Loading Related Objects - 關於延遲加載的部分解釋了這一點。