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

C# 实体框架4:为什么即使没有Include语句也要加载相关的实体?,c#,asp.net,entity-framework-4,C#,Asp.net,Entity Framework 4,我使用的是实体框架4。 我有两个对象:一个Process对象和一个ProcessDescription对象。流程和ProcessDescription之间存在一对一的关联(流程始终具有ProcessDescription) 我正在做以下工作: using (EFEntities ef = new EFEntities(ConnectionString.EFConnString)) { var

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

我正在做以下工作:

using (EFEntities ef = new EFEntities(ConnectionString.EFConnString))
        {                                
            var source = ef.Process;
            List<BusinessLayer.Process> processList = source.ToList();
        }
使用(EFEntities ef=新EFEntities(ConnectionString.EFConnString))
{                                
var source=ef.Process;
List processList=source.ToList();
}
在ToList语句之后,如果我在调试器中检查processList,我可以看到ProcessDescription对象可用于每个进程,我想知道为什么。我认为我必须编写.Include(“ProcessDescription”)来包含它们。它是自动加载的,因为它是一对一的关联吗


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

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

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

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

context.ContextOptions.LazyLoadingEnabled = false;


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

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

context.ContextOptions.LazyLoadingEnabled = false;


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

如果模型上的LazyLoading标志为true,则这不仅仅是一对一关系,而是所有相关实体。如果您不希望在默认情况下禁用延迟加载,可以在模型本身中对其进行更改。如果你想要一次性的场景,你可以像@Jalalx提到的那样去做。这不仅仅是一对一的关系,如果你的模型上的LazyLoading标志为true,那么所有相关的实体都是如此。如果您不希望在默认情况下禁用延迟加载,可以在模型本身中对其进行更改。如果您想要一次性场景,您可以按照@Jalalx提到的那样做。