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

C# 实体框架在处理ObjectContext后检查虚拟列表,c#,entity-framework,C#,Entity Framework,我的场景是我有一个对象FOO,上面有一个虚拟列表属性。这是由EF自动生成的 加载FOO后,我处理了数据上下文,通过DTO将FOO转换为业务对象。比如说 var newFOO = FOO_Dto.change(FOO); 在FOO\u Dto.change的内部,我想检查虚拟列表属性是否为空/null我知道关闭ObjectContext并检查navigation属性将抛出错误。在我的数据层中,有时我返回带有列表的FOO,而返回不带列表的FOO 我的问题是如何检查导航属性以查看列表是否已填充并避免

我的场景是我有一个对象
FOO
,上面有一个
虚拟列表
属性。这是由EF自动生成的

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

var newFOO = FOO_Dto.change(FOO);
FOO\u Dto.change的内部,我想检查虚拟列表属性是否为空/null我知道关闭ObjectContext并检查navigation属性将抛出错误。在我的数据层中,有时我返回带有列表的
FOO
,而返回不带列表的
FOO

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

非常感谢

编辑


在comments部分,我特意希望在检查是否加载了
列表
属性之前关闭上下文。

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

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

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


我越是以断开连接的方式使用EF,就越不允许延迟加载。我几乎要考虑延迟加载反模式了。

在处理上下文之前调用
change
方法。@hami770我看到的唯一方法是@haim770的contextduplicate上的
changetracker
。你能扩展一下吗,也许提供一些链接?我从未见过在你的
FOO\u Dto.change(FOO)
之后写的
change
中的“change”方法。
DbContext
中没有
change
方法。