C# Dispose是否将处理仍被引用的对象?

C# Dispose是否将处理仍被引用的对象?,c#,linq,C#,Linq,定义: 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; } } 在第x行,我可以看到AllBs.C的所有实例和细节。但是,一旦通过Dispose行,有时会model.B丢失对C的所有引用,如果我尝试引用它,我会得到: Ob

定义:

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; }
}
在第x行,我可以看到AllBs.C的所有实例和细节。但是,一旦通过
Dispose
行,有时会model.B丢失对C的所有引用,如果我尝试引用它,我会得到:

ObjectContext实例已被释放,无法再使用 用于需要连接的操作

它只是偶尔发生,而且经常发生。我做错什么了吗


深思熟虑:我认为有时错误是由于使用VS调试器造成的。如果我检查了内容,数据就会被枚举。

您会遇到这种异常,因为当您尝试访问相关的导航属性时,实体框架将尝试使用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()

在这里调用将加载
B
类型的实例,而集合将加载
C

类型的相关实例,这样就行了!。它应该是
.Include(“Cs”)
,因为我的声明实际上是
公共列表Cs
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()