Czy ktoś może mi dać szybki przegląd korzystania z TransactionScope z NHibernate? Czy muszę zrobić coś specjalnego z sesją/IEnlistmentNotification/etc. aby to zadziałało? Czy są jakieś pułapki, o które powinienem się martwić? Na przykład, mogę wymienić wszystkich moich transakcji Hibernacja:NHibernate z TransactionScope
var transaction = session.BeginTransaction();
try
{
// code
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
z tym ?:
using (var scope = new TransactionScope())
{
// code
scope.Complete();
}
Zły; domyślnie TransactionScope używa Lightweight Transaction Manager, który monitoruje promocję. Z MSDN: tak długo jak tylko jeden trwały menedżer zasobów jest zaangażowany, nie ma nic złego w tym, że dane źródło (takie jak Microsoft SQL Server 2005) zarządza transakcją. W takim przypadku LTM nie musi w ogóle zarządzać transakcją - jej rola powinna zostać zredukowana do monitorowania transakcji pod kątem potrzeby promocji. – Henrik
Poza tym SqlConnection-s (jeśli to twój DB), są 1) połączone za kulisami, i 2) można otworzyć więcej niż jeden z jednego wątku bez promowania transakcji, o ile nie udostępniają transakcji. Aby promować transakcję, należy rozpocząć korzystanie z MSDTC. – Henrik
Edytowane, dzięki za dodatkowe informacje. –