Jak wykonać zagnieżdżone transakcje w NHibernate?

Czy mogę zagnieżdżać transakcje w NHibernate i jak je implementować? Korzystam z SQL Server 2008, więc wsparcie jest zdecydowanie w DBMS.

Uważam, że jeśli spróbuję czegoś takiego:

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

    outerTX.Commit();
}

potem o czasie, do którego przychodziouterTX.Commit() transakcja stała się nieaktywna i skutkuje ObjectDisposedException w sesji AdoTransaction.

Czy mamy zatem tworzyć zagnieżdżone sesje NHibernate? Czy jest jeszcze inna klasa, której powinniśmy użyć do zawijania transakcji (słyszałem o TransactionScope, ale nie jestem pewien, co to jest)?

Teraz używamRealizacja UnitOfWork Ayende (dzięki Sneal).

Wybacz naiwność w tym pytaniu, wciąż jestem nowy w NHibernate.

Dzięki!

EDYTOWAĆ: Odkryłem, że możesz użyć TransactionScope, na przykład:

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

Jednak nie jestem tym zbytnio podekscytowany, ponieważ blokuje nas do korzystania z SQL Server, a także odkryłem, że jeśli baza danych jest zdalna, musisz się martwić o włączenie MSDTC ... jeszcze jeden komponent do przejścia źle. Zagnieżdżone transakcje są tak użyteczne i łatwe do wykonania w SQL, że w pewnym sensie zakładałem, że NHibernate może w pewien sposób emulować to samo ...

questionAnswers(4)

yourAnswerToTheQuestion