为什么RelationshipManager.GetRelatedReference <t>(,)总是返回一个具有空值的EntityReference <t>?</t> </t>

时间:2011-03-28 14:09:45

标签: .net entity-framework entity-framework-4

出于某种原因,导航属性不适用于我的Entity Framework模型。

From the direction N->1,每次尝试获取EntityReference时,它都带有空值,即使EntityKey是正确的。

From the direction 1->N,该集合始终为空。

这种行为在整个模型中都是一致的。

无论原因是什么,我认为它应该引发一个以静默方式检索不一致引用的异常内容。

引用带空值的可能原因是什么?

修改

我刚注意到它与延迟加载有关。 EntityReference(T)将IsLoaded属性设置为false,并且Load方法的显式调用可以解决问题。问题是访问导航属性时调用的方法RelationshipManager.GetRelatedReference应该加载EntityReference。不应该吗?

1 个答案:

答案 0 :(得分:3)

此问题是由于LazyLoadingEnabled属性的含义。

乍一看,LazyLoadingEnabled = false似乎意味着EF会在加载对象时加载对象关系,当然还有一些限制,以防止EF加载整个数据库。实际上,这意味着关系将从不被轻微加载。也就是说:从direction N->1开始,返回的EntityReference(T)将具有正确的EntityKey,但IsLoaded将为false,Value将为null。另一方面,在direction 1->N中,集合将为空,IsLoaded将为false。可以使用EntityReference方法显式加载EntityCollectionLoad

LazyLoadingEnabled = true,另一方面,意味着它似乎意味着。关联将在需要时加载。

默认值为false,顺便说一下,我遇到了所有这些混乱。

为了防止混淆,可能应该有一个名为LoadingMode的属性,它将是一个具有有意义值的枚举。例如:NoneLazyEager