繁体   English   中英

访问从linq到SQL的DataContext

[英]Access disposed DataContext from linq to SQL

我有一个linq2sql datacontext被处理掉了。 但是当我检查null时,我总是有一个错误的条件。

DataClasses1DataContext dc = new DataClasses1DataContext();
dc.Dispose();

其他一些代码

if (dc == null) {
    // ALWAYS FALSE
}

我怎样才能知道datacontext是否已被处理?

更新:让我澄清一下自己。 我得到一个datacontext但有时外部代码传递一个对象(它不是null,但已经被处理掉了)。 我需要检查对象是否存在。 我想的是别的东西,而不是试一试。

DataContext类不会公开任何可以告诉您它是否已被处置的属性。
但是,你可以通过重写Dispose(bool)方法自己制作一个:

public bool IsDisposed { get; private set; }
protected override void Dispose(bool disposing) {
    IsDisposed = true;
}

调用Dispose()不会清除对象的引用。 如果dc是一个字段,那么处理这个适用于所有可潜在类的简单方法是手动分配dc = null; 在调用Dispose()之后立即执行。 这也意味着即使您的课程寿命更长,数据上下文也有资格进行垃圾收集。

如果dc是局部变量,只需使用:

using(var dc = new YourDataContext()) {
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM