2011-03-28 60 views
3

出于某种原因,导航属性不适用于我的实体框架模型。为什么RelationshipManager.GetRelatedReference <T>(,)总是返回空值为EntityReference <T>?

From the direction N->1,每次我试图获得一个EntityReference它都带有空值,即使EntityKey是正确的。

From the direction 1->N,集合总是空的。

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

不管是什么原因,我认为它应该引发一个默默检索不一致引用的异常intead。

引用会出现空值的可能原因是什么?

编辑

我只注意到它是与延迟加载。 EntityReference(T)随IsLoaded属性设置为false而显式调用Load方法解决该问题。问题在于访问导航属性时调用的方法RelationshipManager.GetRelatedReference应该加载EntityReference。应该吗?

回答

3

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

乍一看,LazyLoadingEnabled = false似乎意味着EF会在加载对象时加载对象关系,当然还有一些限制,以防止EF加载整个数据库。其实,这意味着关系将永不 implitly加载。即:从direction N->1开始,返回的EntityReference(T)将具有正确的EntityKey,但IsLoaded将为false,并且Value将为空。另一方面,在direction 1->N中,收集将是空的,IsLoaded将是错误的。可以使用Load方法明确加载EntityReferenceEntityCollection

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

默认为false,这种方式触发了我所经历的所有这些困惑。

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

相关问题