访问从linq到SQL的DataContext

时间:2011-01-16 14:07:35

标签: c# .net linq-to-sql

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

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

进一步的其他代码

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

如何判断datacontext是否已被处理?

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

2 个答案:

答案 0 :(得分:5)

DataContext类不会公开任何可以告诉您是否已被处置的属性 但是,您可以通过覆盖Dispose(bool)方法自行创建一个:

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

答案 1 :(得分:1)

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

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

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