Выполняет ли 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
возвращает его.