簡體   English   中英

啟用EF6 LazyLoadingEnabled,但加載相關對象

[英]EF6 LazyLoadingEnabled enabled but loads related objects

我在數據庫中使用EF 6。 我稱構造函數ctx = new EntityContext()。 然后嘗試獲取ctx.Set()例如。 默認情況下,LazyLoadingEnabled = true。 但是方法返回包含相關對象的集合。 而且,看起來對象是遞歸循環的。 我做錯了什么? 為什么延遲加載不起作用? 我還啟動了SQL事件探查器,對此我不太熟悉,但是...我開始在事件探查器中進行監視,然后啟動測試應用程序,並且...我看到的唯一請求是對表的請求,而對相關表沒有其他請求。 請求看起來像:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[CreateDate] AS [CreateDate], 
[Extent1].[Type] AS [Type], 
[Extent1].[Status] AS [Status]
FROM [dbo].[Task] AS [Extent1]

多數民眾贊成,但調試器顯示實體與相關的對象。 為什么這樣?

我相信這里的問題不是EF加載相關對象,而是您加載它們!

如果您正在VS中的調試器中查看一個集合,那么您將展開一個集合,EF將前往數據庫中查詢相關集合(就像在代碼中一樣)。

如果您在執行此操作時觀看了SQL事件探查器,則應該看到它,然后再執行第二次查詢。

EF通過動態代理工作,並且在調試器中擴展集合等效於使用代碼中的對象並調用MyObject.TheCollectionProperty.ToList()

延遲加載僅意味着填充相關集合所需的SQL不會執行,除非您嘗試訪問相關集合(與使用聯接的單個前期查詢相反)。 有時這是可取的,有時則不是。 這將取決於您的應用程序邏輯如何工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM