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 ...