我知道并不是所有提供者都可以保证隐式回滚(通常在发生异常并调用Dispose时发生)。但是,许多示例使用:
using (DbTransactio txn = cnctn.BeginTransaction())
有什么理由吗?
最佳答案
最简单的答案是“因为它实现了IDisposable
”。任何实现IDisposable
的类型:适本地处理它是您的工作。在这种情况下,使用过程代码,最简单的方法是通过using
语句。
在这种特定情况下,答案将是:因为在发生错误的情况下,您希望事务回滚而不是留给GC。我个人可能会倾向于使用catch
到Rollback
,但是应该希望Dispose()
已经做到了。但是,除非有文档记录,否则我不会自己依赖它。例如:
using(var tran = conn.BeginTransaction()) {
try {
// do stuff...
tran.Commit();
} catch {
tran.Rollback();
throw;
}
}
请注意,在相关的
TransactionScope
情况下,“无需标记为完成的Dispose()
”是发出回滚信号的预期方式:using(var tran = new TransactionScope()) {
// do stuff...
tran.Complete();
}
关于c# - 为什么在ADO.NET/C#中对DbTransaction使用using语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14519596/