我正在使用实体框架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()'时,会有一个自动执行的内连接,这又是因为它是一对一的关系?
答案 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
来禁用它。