![](/img/trans.png)
[英]DBContext lazyloadingenabled set to true still loads related entities by default
[英]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.