实体框架引用未自动加载

ado.net c# entity-framework

在ADO.Net实体框架中,我有一个对象,它有4个对其他对象的引用。出于某种原因,当我查询这些引用时,其中两个自动加载(如预期的那样),其中两个总是返回null。

奇怪的是,当我手动询问引用加载时,它们加载的只是花花公子。

举个例子:

if (account.HoldingEntity == null && 
    account.HoldingEntityReference.EntityKey != null) {

    account.HoldingEntityReference.Load();
    account.HoldingEntity = account.HoldingEntityReference.Value;
}

当我第一次检查HoldingEntity它始终为null,但是Load将返回HoldingEntity而没有问题。

有线索吗?

谢谢!

一般承认的答案

使用ADO.NET实体,您需要使用Include指定要自动加载的实体,如

Dim entity = (From e in db.Entities.Include("SubEntity"))

热门答案

正如其他人所说的那样,你需要在v1中.Include()以避免需要调用.Load()

在4.0中,您将能够设定DeferredLoadingEnable d您ObjectContext (我认为我们正在改变这个名字更合适的LazyLoadingEnabled及时Beta2中)。

至于为什么你已经加载了2个关系。这可能是一种叫做“关系修复”的副作用。

当两个相关实体处于同一个上下文中时,它们会自动将它们的关系固定为相互指向。因此,如果(我怀疑)4个实体中的2个已经在您的上下文中,当您执行查询时,即使您没有调用,也会在加载了2个关系的情况下结束.Include().Load()

希望这可以帮助

干杯亚历克斯




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因