Czy mogę zagnieżdżać transakcje w NHibernate i jak je wdrożyć? Używam SQL Server 2008, więc wsparcie jest zdecydowanie w DBMS.Jak wykonać zagnieżdżone transakcje w NHibernate?
Uważam, że jeśli spróbuję coś takiego:
using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
using (var nestedTX = UnitOfWork.Current.BeginTransaction())
{
... do stuff
nestedTX.Commit();
}
outerTX.Commit();
}
następnie przez czas chodzi o outerTX.Commit()
transakcja stała się nieaktywna, a wyniki w ObjectDisposedException na AdoTransaction sesji.
Czy w związku z tym mamy utworzyć sesje zagnieżdżonych NHibernate? Czy jest jakaś inna klasa, której powinniśmy używać do zawijania transakcji (słyszałem o TransactionScope, ale nie jestem pewien co to jest)?
Używam teraz Ayende's UnitOfWork implementation (dzięki Sneal).
Przebaczam jakąkolwiek naiwność w tym pytaniu, wciąż jestem nowy w NHibernate.
Dzięki!
EDIT: Odkryłam, że można używać TransactionScope, takich jak:
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 podekscytowany, że wszystko to, co zaskoczy nas do programu SQL Server, a również znalazłem, że jeśli baza danych jest zdalna, musisz się martwić o włączoną obsługę MSDTC ... jeszcze jeden składnik, który się nie powiedzie. Zagnieżdżone transakcje są tak użyteczne i łatwe do wykonania w SQL, że zakładam, że NHibernate będzie miał jakiś sposób naśladowania tego samego ...
Czy udało się znaleźć odpowiedź? Jak w końcu zagnieżdżać transakcje? – learning
@ user281180, sort. Nie znalazłem sposobu, aby je faktycznie wykonać, ale możesz przybliżyć to doświadczenie. Blogowałem o tym tutaj: http://blog.constructionhive.com/2010/07/22/nested-transactions-and-nhibernate/ – Gavin