出于某种原因,导航属性不适用于我的Entity Framework模型。
From the direction N->1
,每次尝试获取EntityReference时,它都带有空值,即使EntityKey是正确的。
From the direction 1->N
,该集合始终为空。
这种行为在整个模型中都是一致的。
无论原因是什么,我认为它应该引发一个以静默方式检索不一致引用的异常内容。
引用带空值的可能原因是什么?
修改
我刚注意到它与延迟加载有关。 EntityReference(T)将IsLoaded属性设置为false,并且Load方法的显式调用可以解决问题。问题是访问导航属性时调用的方法RelationshipManager.GetRelatedReference
应该加载EntityReference。不应该吗?
答案 0 :(得分:3)
此问题是由于LazyLoadingEnabled
属性的含义。
乍一看,LazyLoadingEnabled
= false似乎意味着EF会在加载对象时加载对象关系,当然还有一些限制,以防止EF加载整个数据库。实际上,这意味着关系将从不被轻微加载。也就是说:从direction N->1
开始,返回的EntityReference(T)
将具有正确的EntityKey
,但IsLoaded
将为false,Value
将为null。另一方面,在direction 1->N
中,集合将为空,IsLoaded
将为false。可以使用EntityReference
方法显式加载EntityCollection
或Load
。
LazyLoadingEnabled
= true,另一方面,意味着它似乎意味着。关联将在需要时加载。
默认值为false,顺便说一下,我遇到了所有这些混乱。
为了防止混淆,可能应该有一个名为LoadingMode
的属性,它将是一个具有有意义值的枚举。例如:None
,Lazy
,Eager