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 Framework 会自动处理它吗?

4

3 回答 3

3

我知道这是古老的历史,但我不能留下这些答案。

不需要处置数据库实例。它甚至没有实现 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 回答