Могу ли я выполнять вложенные транзакции в NHibernate и как их реализовать? Я использую SQL Server 2008, поэтому поддержка определенно в СУБД.Как выполнять вложенные транзакции в NHibernate?
Я считаю, что если я попробовать что-то вроде этого:
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's UnitOfWork implementation (спасибо Sneal).
Простите любую наивность в этом вопросе, я все еще новичок в 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 будет иметь некоторый способ подражать одному и тому же ...
Вы смогли найти ответ? Как в конечном итоге сделать вложенные транзакции? – learning
@ пользователь281180, вид. Я не нашел способа сделать это, но вы можете приблизиться к опыту. Сообщаем об этом в блоге: http://blog.constructionhive.com/2010/07/22/nested-transactions-and-nhibernate/ – Gavin