Como faço transações aninhadas no NHibernate?

Posso fazer transações aninhadas no NHibernate e como implementá-las? Estou usando o SQL Server 2008, então o suporte está definitivamente no SGBD.

Eu acho que se eu tentar algo assim:

using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
    using (var nestedTX = UnitOfWork.Current.BeginTransaction())
    {
        ... do stuff
        nestedTX.Commit();
    }

    outerTX.Commit();
}

então no momento em que se trata deouterTX.Commit() a transação tornou-se inativa e resulta em um ObjectDisposedException na sessão AdoTransaction.

Portanto, devemos criar sessões de NHibernate aninhadas? Ou há alguma outra classe que devemos usar para envolver as transações (ouvi falar do TransactionScope, mas não tenho certeza do que é isso)?

Agora estou usandoImplementação do UnitOfWork de Ayende (obrigado Sneal)

Perdoe qualquer ingenuidade nessa questão, ainda sou novo no NHibernate.

Obrigado!

EDITAR: Eu descobri que você pode usar o TransactionScope, como:

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();
}

No entanto, não estou muito entusiasmado com isso, pois isso nos prende ao uso do SQL Server, e também descobri que, se o banco de dados for remoto, você terá que se preocupar em ter o MSDTC habilitado ... mais um componente para ir errado. Transações aninhadas são tão úteis e fáceis de fazer no SQL que eu presumo que o NHibernate teria alguma forma de emular o mesmo ...

questionAnswers(4)

yourAnswerToTheQuestion