我正在使用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会自动处理吗?
答案 0 :(得分:3)
我知道这是古老的历史,但我不能留下这些答案。
您不需要处置数据库实例。它甚至没有实现IDisposable。
您执行需要处置您已创建的显式DbCommand对象。
答案 1 :(得分:2)
执行_db = null不会丢弃该对象。
您必须执行_db.Dispose(),或使用using块。
垃圾收集会在非确定性时间处理对象,但是一旦你创建了一个实现IDisposable的对象,你应该确保你总是调用Dispose()(当然,除非你将它交给一个对象)或承诺这样做的其他功能。)
在这种情况下,很容易看出工厂没有办法知道你何时完成了这个物体,所以你必须自己处理它。
答案 2 :(得分:0)
垃圾收集将在超出范围时处置该对象。所以你的代码会起作用,但这不是最好的解决方案。
最好将数据库对象的创建放在using语句中。