1

好吧,这个问题几乎说明了一切,但我会尽力为您提供上下文。我正在使用 Entity Framework 4.0,我经常使用以下语法 -

using (MLEntities context = ModelAccess.GetContext())
{
    /*just a sample statement*/
    this.ClientList = context.Clients.ToList();
    ...
    //Some other code
}  

我的理解是,每当我退出using块时,都会调用类(MLEntitiesDispose()的基类)的方法,我猜这会释放任何非托管资源,特别是在这种情况下,是数据库连接。ObjectContext但是由于我通过this.ClientList = context.Clients.ToList();上下文持有对上下文对象的引用,因此不会被垃圾收集。正确的?

现在对于一些实例化的上下文对象,当应用程序运行时,我需要知道它们是否仍然被持有、被应用程序使用,或者它们是否已经被释放。我没有对using块外上下文的任何引用,但即使我有任何引用,尝试使用该引用也会使应用程序使用上下文对象。那么我该怎么做呢?任何建议表示赞赏。谢谢。

编辑:实际上我并不是说我持有对上下文对象的直接引用。诚实的错误。我的意思是,因为Clients它是上下文的一个属性,并且通过this.ClientList我持有对 的引用Clients,只要实例化上下文的当前对象与它一起存在this.ClientList,它不会使上下文对象也保持活动状态吗?

4

1 回答 1

2

using() {}将始终处置正在使用的对象。您不会通过 ClientList 引用上下文。这是对列表的简单引用。即使您在处理后引用了上下文,在访问它时也会收到ObjectDisposedException异常。
当上下文被释放时,ClientList 将与上下文分离,因此 EF 不会更多地跟踪此列表的更改。

于 2012-09-04T17:03:58.023 回答