Quando persistiamo i dati, spesso capita di dover eseguire operazioni con Entity Framework e altre operazioni con comandi che lanciano query SQL o stored procedure. Per mettere nella stessa transazione tutte le operazioni possiamo usare la classe TransactionScope oppure possiamo passare al costruttore della classe DbContext una connessione con una transazione.
Prima di invocare il metodo SaveChanges dobbiamo usare il metodo UseTransaction passando in input la transazione. In questo modo la classe DbContext userà la nostra transazione per le operazioni. Un esempio del codice è visibile nel prossimo esmepio.
using (var conn = new SqlConnection("connectionstring")) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { var sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.Transaction = sqlTxn; sqlCommand.CommandText = "delete from product where productid = 1" //esegue una query custom sqlCommand.ExecuteNonQuery(); using (var context = new MyContext(conn, contextOwnsConnection: false)) { //indica al contsto di usare la nostra transazione context.Database.UseTransaction(trans); //attacca entità al contesto per la persistenza ... //esegue la persistenza sfruttando la nostra transazione context.SaveChanges(); } //esegue il commit della transazione trans.Commit(); } catch { //esegue il rollback della transazione in caso di errori trans.Rollback(); } } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Criptare la comunicazione con mTLS in Azure Container Apps
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Utilizzare politiche di resiliency con Azure Container App
Gestire i null nelle reactive form tipizzate di Angular
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Short-circuiting della Pipeline in ASP.NET Core
Installare le Web App site extension tramite una pipeline di Azure DevOps
Specificare il versioning nel path degli URL in ASP.NET Web API
Usare lo spread operator con i collection initializer in C#