Как мне сделать вложенные транзакции в 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 будет каким-то образом эмулировать то же самое ...

Ответы на вопрос(4)

Ваш ответ на вопрос