2009-04-22 16 views
7

Questo è correlato allo Nested Database transactions in C#.Posso mescolare SqlConnection.BeginTransaction e TransactionScope?

Gli oggetti nella raccolta che voglio prendere in transazione implementano le proprie transazioni utilizzando il metodo SqlConnection.BeginTransaction.

Dopo aver letto questo post non sono sicuro di poterli mescolare o meno. Sto utilizzando SQL Server 2005 e ogni oggetto utilizza i dettagli di connessione dalla classe di configurazione statica.

Qualcuno ha esperienza con questo?

Ecco il codice di esempio:

using(TransactionScope scope = new TransactionScope()) 
{ 
    for (int i=0; i<=1000....) 
    { 
    SqlConnection con = new SqlConnection() 
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try { 
     con.Open(); 
     DbTransaction t = con.BeginTransaction(); 
     cmd.ExecuteNonQuery(); 
     ... 
     cmd.CommandText = .... ; 
     cmd.ExecuteNonQuery(); 
     t.Commit ... 
    } 
    catch { 
     t.Rollback ... 
    } 
    con.Close() 
    } 
} 

Thx

risposta

5

Dopo aver trascorso ore per configurare MSDTC per lavorare su entrambe le macchine, ho finalmente arrivato al punto in cui ho potuto testare il codice.

E sembra funzionare (con 1 database)

Il problema di cui sopra può essere utile per le persone che non hanno accesso al codice sorgente in modo non riesce a liberarsi di sistema "legacy" transazionale o se transazionale parti del codice non sono localizzate o, come nel mio caso, non si vuole confondere troppo con il codice complesso che si è dimostrato stabile nell'ambiente di produzione, ma è necessario introdurre transazioni nidificate ...

Fammi sapere se hai un'esperienza diversa.

+0

Dovresti segnare la risposta come risposta a questa domanda - è permesso! – Fenton

+1

Nel mio caso abbiamo i test di "unità" che sono avvolti in TransactionScope in modo che sulle nostre macchine di sviluppo possiamo realizzare complesse manipolazioni del database senza pensarci per ogni test e classe di test e avere tutto [teoricamente] annullato. Allo stesso tempo, non vogliamo necessariamente l'utilizzo di MS DTC sui server di produzione e volevo racchiudere alcune manipolazioni di entità Entity Framework in una transazione normale in modo che l'intera operazione possa eseguire il rollback se una di esse non riesce ... Idealmente, TransactionScope dovrebbe continuare a funzionare e anche la transazione interna dovrebbe ... – bambams

Problemi correlati