0

EntLib 4.1 を使用しています。

_db = DatabaseFactory.CreateDatabase("DbName");
DbCommand dbCommand = _db.GetStoredProcCommand("someProcedure");
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result = _db.ExecuteNonQuery(dbCommand);

タスクを実行した後、次のように _db オブジェクトを破棄する必要がありますか?

finally
{
    _db = null;
}

...またはEntLibフレームワークはそれを自動的に処理しますか?

4

3 に答える 3

3

これが古い歴史であることは知っていますが、これらの答えをそのままにしておくことはできません.

Database インスタンスを破棄する必要はありません。IDisposable も実装していません。

作成した明示的な DbCommand オブジェクトを破棄する必要があります

于 2010-08-17T06:17:57.717 に答える
2

_db = null を実行しても、オブジェクトは破棄されません。

_db.Dispose() を実行するか、using ブロックを使用する必要があります。

ガベージ コレクションは非決定論的な時点でオブジェクトを破棄しますが、IDisposable を実装するオブジェクトを作成したらすぐに、常に Dispose() を呼び出すようにする必要があります (もちろん、オブジェクトまたは別の関数に渡す場合を除きます)。それを行うことを約束します)。

この場合、オブジェクトの処理がいつ完了したかをファクトリが知る方法がないことは簡単にわかります。そのため、自分で破棄する必要があります。

于 2009-08-09T12:22:57.527 に答える
0

オブジェクトがスコープ外になると、ガベージ コレクションによってオブジェクトが破棄されます。したがって、コードは機能しますが、これは最善の解決策ではありません。

データベース オブジェクトの作成を using ステートメントに配置することをお勧めします。

于 2009-08-09T12:07:50.090 に答える