嗯,这个问题几乎说明了一切,但我会尝试给你上下文。我正在使用Entity Framework 4.0,我经常使用以下语法 -
using (MLEntities context = ModelAccess.GetContext())
{
/*just a sample statement*/
this.ClientList = context.Clients.ToList();
...
//Some other code
}
我的理解是每当我退出using
块时,都会调用Dispose()
类(MLEntities的基类)的ObjectContext
方法,我想释放任何非托管资源,特别是在这种情况下,数据库连接。但由于我通过this.ClientList = context.Clients.ToList();
持有对上下文对象的引用,因此上下文不会被垃圾收集。对?
现在对于一些实例化的上下文对象,当应用程序运行时,我需要知道它们是否仍被保留,被应用程序使用,或者它们是否已被释放。我没有using
块之外的任何上下文的引用,但即使我有任何内容,尝试使用该引用也会使应用程序使用上下文对象。那我该怎么办呢?任何建议表示赞赏。谢谢。
编辑:其实我并不是说我直接引用了上下文对象。诚实的错误。我的意思是,因为Clients
是上下文的属性,并且this.ClientList
我持有Clients
的引用,只要实例化上下文的当前对象与{ {1}},它不会保持上下文对象的活动吗?
答案 0 :(得分:2)
using() {}
将始终处置正在使用的对象。您不通过ClientList保持对上下文的引用。它是列表的简单参考。即使您在处理完背景后对其进行了引用,在访问它时也会出现ObjectDisposedException异常。
处置上下文时,ClientList将与上下文分离,因此EF不会更多地跟踪此列表的更改。