繁体   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