实体框架在处理ObjectContext后检查虚拟列表

时间:2014-04-06 17:26:59

标签: c# entity-framework

我的方案是我有一个对象FOO,其上有virtual List<bar>属性。这是由EF自动生成的。

我加载FOO后处理数据上下文,我通过DTO将FOO转换为业务对象。例如

var newFOO = FOO_Dto.change(FOO);

FOO_Dto.change内部我想检查虚拟列表属性是否为空/空。 我知道关闭ObjectContext并检查导航属性会引发错误。在我的数据层中,有时我会将FOO与列表一起返回,而FOO则不返回列表。

我的问题是如何检查导航属性以查看列表是否已填充,并避免当前正在生成的ObjectContext错误

非常感谢!!

修改

在评论部分,我特意希望在检查是否加载List<Bar>属性之前关闭上下文。

1 个答案:

答案 0 :(得分:1)

不,你不能,除了尝试和捕捉异常的丑陋方式。您只能通过获取所有者的DbEntityEntry来确定是否加载了集合,您只能通过上下文实例获取该集合。

但是如果您事先知道集合可能在上下文范围之外被解决,则需要在上下文处于活动状态时加载它,或者不加载它并防止延迟加载。永远不要允许延迟加载在上下文的生命周期之外发生。

在大多数情况下,这意味着您必须关闭延迟加载并急切加载使用方法所需的所有数据。

我越是以断开连接的方式使用EF,我就越少允许延迟加载。我接近考虑延迟加载反模式。