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
Supportare la sessione affinity di Azure App Service con Application Gateway
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Selettore CSS :has() e i suoi casi d'uso avanzati
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Gestire il routing HTTP in Azure Container App
Testare l'invio dei messaggi con Event Hubs Data Explorer
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Path addizionali per gli asset in ASP.NET Core MVC
Utilizzare WebJobs su Linux con Azure App Service
Loggare le query più lente con Entity Framework
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste