Я не могу вспомнить слишком много случаев, когда явный откат является правильным подходом, за исключением случаев, когда требуется строгая политика контроля изменений. Но опять же, я немного медленнее в освоении.
веденном ниже коде, если при выполнении операторов SQL выдается какое-либо исключение, следует ожидать неявного отката транзакции, поскольку транзакция не была зафиксирована, она выходит из области видимости и удаляется:
using (DbTransaction tran = conn.BeginTransaction())
{
//
// Execute SQL statements here...
//
tran.Commit();
}
Является ли приведенное выше приемлемой практикой, или следует перехватить исключение и явно вызвать функцию tran.Rollback (), как показано ниже:
using (DbTransaction tran = conn.BeginTransaction())
{
try
{
//
// Execute SQL statements here...
//
tran.Commit();
}
catch
{
tran.Rollback();
throw;
}
}