EF6 LazyLoadingEnabled启用,但加载相关对象

本文关键字:对象 加载 LazyLoadingEnabled 启用 EF6 | 更新日期: 2023-09-27 18:16:43

我使用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]

就是这样,但调试器显示实体与相关对象。为什么如此?

EF6 LazyLoadingEnabled启用,但加载相关对象

我认为这里的问题不是EF加载相关对象,而是你加载它们!

如果你在VS的调试器中查看一个集合,然后你扩展一个集合,EF会去数据库查询相关的集合(就像你在代码中做的一样)。

如果您在执行此操作时观察SQL profiler,您应该看到它在此时执行第二个查询。

EF通过动态代理工作,在调试器中扩展集合相当于在代码中处理对象,并调用MyObject.TheCollectionProperty.ToList()

延迟加载只是意味着填充相关集合所需的SQL不会被执行,除非您尝试访问相关集合(与使用连接的单个前置查询相反)。有时这是可取的,有时不是。