定义:
public class A
{
List<B> B { get; set; }
}
public class B
{
public List<C> C { get; set; }
}
public class C
{
public string Name { get; set; }
}
代码:
var model = new A();
DbContext db = new DbContext()
var AllBs = (from b in db.Bs select b).ToList();
model.B = AllBs; //line x
db.Dispose()
在第 x 行,我可以看到 AllBs.C 的所有实例和详细信息。但是,一旦通过 Dispose
行,SOMETIMES model.B 将丢失对 C 的所有引用,如果我尝试引用它,我会得到:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
它只是偶尔发生,而不是经常发生。我做错了什么吗?
经过思考:我认为有时是我使用 VS 调试器造成的。如果我检查了内容,数据就会被枚举。
最佳答案
您会收到该异常,因为当您尝试访问相关的导航属性时, Entity Framework 将尝试使用 DbContext 的连接实例(在延迟加载模式下)填充实例。
在这种情况下你想使用预加载:
var model = new A();
DbContext db = new DbContext()
var AllBs = (from b in db.Bs.Include("C") select b).ToList();
model.B = AllBs; //line x
db.Dispose()
调用 Include
将在此处加载 B
类型的实例,并加载类型为 C
关于c# - Dispose 会处理仍然被引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29465663/