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

时间:2012-02-29 19:31:36

标签: c# asp.net entity-framework-4

我正在使用实体框架4。 我有2个对象:Process对象和ProcessDescription对象。 Process和ProcessDescription之间存在一对一关联(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()'时,会有一个自动执行的内连接,这又是因为它是一对一的关系?

2 个答案:

答案 0 :(得分:1)

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

context.ContextOptions.LazyLoadingEnabled = false;

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

(假设Database First with ObjectContext)

答案 1 :(得分:0)

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