C# 实体框架4:为什么即使没有Include语句也要加载相关的实体?
我使用的是实体框架4。 我有两个对象:一个Process对象和一个ProcessDescription对象。流程和ProcessDescription之间存在一对一的关联(流程始终具有ProcessDescription) 我正在做以下工作: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
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提到的那样做。