entity framework引用不会自动加载
在ADO.Netentity framework中,我有一个对象,它有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中,您将能够在ObjectContext
上设置DeferredLoadingEnable
d(我认为我们正在将此名称更改为适合于Beta2的LazyLoadingEnabled)。
至于为什么你已经加载了两个已经加载的关系。 这可能是一种叫做“关系修复”的副作用。
当两个相关实体处于同一个上下文中时,它们会自动将它们的关系固定为相互指向。 因此,如果(我怀疑)4个实体中有2个已经在您的上下文中,当您执行查询时,即使您没有调用,也会在加载了2个关系的情况下结束.Include()
或.Load()
。
希望这可以帮助
干杯亚历克斯
这是在EF v1中作为设计决策完成的,并且许多开发人员实际上更喜欢明确控制是否以及何时加载引用的属性。
对于在2009年底之前推出.NET 4.0的EF v4,如果您愿意,您可以选择打开自动延迟加载。 有关EF v4中延迟加载的更多信息,请参阅ADO.NET团队博客上的此博客文章 。
渣