实体框架4:为什么即使没有Include语句也要加载相关实体

本文关键字:实体 语句 加载 Include 框架 为什么 | 更新日期: 2023-09-27 18:26:06

我使用的是实体框架4。我有两个对象:一个Process对象和一个ProcessDescription对象。流程和流程描述之间存在一对一关联(流程总是有流程描述)

我正在做以下事情:

using (EFEntities ef = new EFEntities(ConnectionString.EFConnString))
        {                                
            var source = ef.Process;
            List<BusinessLayer.Process> processList = source.ToList();
        }

在ToList语句之后,如果我在调试器中检查processList,我可以看到ProcessDescription对象可用于每个进程,我想知道为什么。我想我必须编写.Include("ProcessDescription")才能包含它们。它是自动加载的,因为它是一对一的关联吗?

更新:EnableLazyLoading确实设置为true。我的问题是:如果该属性设置为true,我认为会加载相关实体,但仅在需要时加载。为了检查它是否已加载,我们可以在相关实体上使用IsLoaded标志。但是,在我的情况下,ProcessDescription对象上没有IsLoaded属性。这是否意味着,当我执行"ToList()"时,会自动执行一个内部联接,同样是因为它是一对一的关系?

实体框架4:为什么即使没有Include语句也要加载相关实体

关闭延迟加载,您将在调试器中看到null值。

context.ContextOptions.LazyLoadingEnabled = false;

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.contextoptions.aspx

(假设数据库优先使用ObjectContext)

在实体之间的关系中,实体框架会自动加载所有关联的实体。您可以通过在using语句中设置ef.ContextOptions.LazyLoading = false来禁用它。