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
Dovresti segnare la risposta come risposta a questa domanda - è permesso! – Fenton
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