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
Blazor e InputHidden in .NET 10
Supporto semplificato per le left join in Entity Framework 10
Usare i generics di C# con la clausola nameof in modo semplificato
Utilizzare i command service nei test con .NET Aspire
Creare comandi nella dashboard .NET Aspire
Gestione delle scrollbar dinamiche in HTML e CSS
Utilizzo delle stepped value functions nel CSS
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Utilizzare noopener e noreferrer nei link HTML
Integrare LLM alle nostre applicazioni in .NET con MCP
Mischiare codice server side e client side in una query LINQ con Entity Framework


