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()