2011-01-16 10 views
3

私は配置されるlinq2sql datacontextを持っています。しかし、私がnullをチェックすると、私は常に偽の状態に陥ります。アクセスが破棄されましたlinqからSQLへのDataContext

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

いくつかの他のコードをさらに

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

のDataContextが配置されている場合にどのように私は見つけることができますか?

更新日: 自分自身を明確にしてください。私はdatacontextを取得しますが、時には外部コードがオブジェクトを渡します(nullではありませんが、すでに破棄されています)。オブジェクトが存在するかどうかを確認する必要があります。私はtry-catch以外の何かを考えていた。

答えて

5

DataContextクラスは、それが配置されていますかどうかを伝えることができます任意のプロパティを公開しません。
しかし、あなたはDispose(bool)メソッドオーバーライドすることで、1を自分で作ることができます。

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

ありがとう、私もdispose()をオーバーライドする必要があります:public new void Dispose(){IsDisposed = true; base.Dispose(); } – dampee

+0

@Dampee:**いいえ**。 'Dispose'メソッドをシャドーしないでください。確実に動作しません。 'Dispose(bool)'をオーバーライドすれば十分です。 – SLaks

1

Dispose()を呼び出すと、オブジェクトへの参照がクリアされません。 dcがフィールドの場合、のすべてので対応する簡単な方法は、Dispose()を呼び出した直後に手動でを割り当てることです。これは、たとえあなたのクラスがもっと長く生きていても、データコンテキストがガベージコレクションの対象となることを意味します。

DCがローカル変数の場合は、単に使用:

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

を私はオブジェクト上のDataContextを取得する必要がありますが、外部コード(私が管理していない)が時々に配置されたオブジェクトを渡します。 – dampee

関連する問題