定义:
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的所有引用,如果我尝试引用它,我会得到:
ObjectContext实例已被释放,无法再使用 对于需要连接的操作。
有时候只会发生这种情况。我做错了吗?
经过深思熟虑:我认为有时候是因为我使用了VS调试器。如果我检查了内容,那么数据就会被枚举。
答案 0 :(得分:3)
您正在获得该异常,因为当您尝试访问相关的导航属性时,实体框架将尝试使用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
类型的相关实例