很多例子了数据库事务的主张有明确的回退,沿着线:显式事务回滚是否必需?
using (var transaction = ...)
{
try
{
// do some reading and/or writing here
transaction.Commit();
}
catch (SqlException ex)
{
// explicit rollback
transaction.Rollback();
}
}
不过,我倾向于这样做:
using (var transaction = ...)
{
// do some reading and/or writing here
transaction.Commit();
}
当异常发生时,我只是凭着隐式回滚未提交的事务。
依赖这种隐式行为是否存在问题?有没有人有一个令人信服的理由,为什么我不应该这样做?
您的问题中的示例代码可以说是有缺陷的,因为它不会重新抛出。也许忘记这种倾向是避免这种模式的理由? :) – 2010-02-17 15:30:24
谁说你想重新抛出?在很多情况下,回滚事务可以被视为处理异常。 – 2010-02-17 16:08:47
你提出了两个不同的“选项”。对于第一个行为像第二个,它必须重新抛出。为了相当,两个例子中的一个需要改变。 – 2010-02-17 17:54:40