Выполняет ли Nhibernate session.BeginTransaction автоматический откат при исключении в

Хорошо извините за длинное название темы...

Если я делаю следующее:

using (var transaction = session.BeginTransaction())
{
    // do something
    transaction.Commit();
}

Если что-то сделало что-то, вызвавшее какое-то исключение, будет ли это автоматический откат, или мне нужно явно проверить это, как показано ниже:

using (var transaction = session.BeginTransaction())
{
    try
    {
        // do something
        transaction.Commit();
    }
    catch (Exception)
    {
        transaction.Rollback();
    }
}

Ответы

Ответ 1

Это безопасное предположение о том, что транзакция будет отменена, если коммит завершится сбой в используемом блоке.

ITransaction завершает транзакцию ADO.NET за кулисами, поэтому она зависит от конкретной реализации поставщика. Метод Dispose в исходном коде, который я проверил (2.1), предполагает, что вызов Dispose на внутреннем IDbTransaction возвращает его.