Как мне сделать вложенные транзакции в NHibernate?
Могу ли я делать вложенные транзакции в NHibernate и как их реализовать? Я использую SQL Server 2008, поэтому поддержка определенно есть в СУБД.
Я считаю, что если я попробую что-то вроде этого:
using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
using (var nestedTX = UnitOfWork.Current.BeginTransaction())
{
... do stuff
nestedTX.Commit();
}
outerTX.Commit();
}
тогда, когда дело доходит доouterTX.Commit()
транзакция стала неактивной и приводит к исключению ObjectDisposedException в сеансе AdoTransaction.
Поэтому мы должны вместо этого создавать вложенные сеансы NHibernate? Или есть какой-то другой класс, который мы должны использовать, чтобы обернуть транзакции (я слышал о TransactionScope, но я не уверен, что это такое)?
Я сейчас используюВнедрение Ayende UnitOfWork (спасибо, Снил).
Простите за любую наивность в этом вопросе, я все еще новичок в NHibernate.
Спасибо!
EDIT: Я обнаружил, что вы можете использовать TransactionScope, например:
using (var transactionScope = new TransactionScope())
{
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
transactionScope.Commit();
}
Однако меня это не очень радует, так как это ограничивает нас в использовании SQL Server, а также я обнаружил, что если база данных удаленная, вам придется беспокоиться о включении MSDTC ... еще один компонент неправильно. Вложенные транзакции настолько полезны и их легко выполнять в SQL, что я предположил, что NHibernate будет каким-то образом эмулировать то же самое ...