Qualcuno può darmi una rapida panoramica sull'utilizzo di TransactionScope con NHibernate? Devo fare qualcosa di speciale con la sessione/IEnlistmentNotification/etc. per farlo funzionare? Ci sono delle insidie di cui dovrei preoccuparmi? Ad esempio, è possibile sostituire tutte le mie operazioni di Hibernate:NHibernate with TransactionScope
var transaction = session.BeginTransaction();
try
{
// code
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
con questo ?:
using (var scope = new TransactionScope())
{
// code
scope.Complete();
}
Sbagliato; per impostazione predefinita TransactionScope utilizza il Gestore transazioni leggero che monitora la promozione. Da MSDN: fino a quando non viene coinvolto un singolo gestore risorse durevole, non c'è nulla di male nel lasciare che la risorsa sottostante (come Microsoft SQL Server 2005) gestisca la transazione. In tal caso, l'LTM non ha bisogno di gestire effettivamente la transazione, il suo ruolo dovrebbe essere ridotto al monitoraggio della transazione per un bisogno di promozione. – Henrik
Oltre a questo, SqlConnection-s (se questo è il tuo DB), sono 1) raggruppati dietro le quinte, e 2) puoi aprire più di uno da un singolo thread senza promuovere la transazione fintanto che non condividono la transazione. Promuovere la transazione significa iniziare a utilizzare MSDTC. – Henrik
Modificato, grazie per le informazioni aggiuntive. –