Quando con la versione 6 di EF Core utilizziamo il metodo SaveChanges o la sua controparte asincrona, EF Core genera automaticamente una transazione ed esegue i comandi all?interno di essa. Prendiamo come esempio il seguente codice.
using var ctx = new MyContext(); ctx.Customers.Add(customer); ctx.Orders.Add(order); ctx.Logs.Add(log); ctx.SaveChanges();
Se loggassimo i comandi inviati al database, noteremmo che il primo comando è "Begin Transaction", seguito dai comandi per inserire i tre record seguiti a loro volta dal comando "Commit Transaction" o "Rollback Transaction" rispettivamente se i comandi precedenti sono stati eseguiti correttamente o meno.
Quando dobbiamo eseguire comandi multipli (ad esempio aggiornare più tabelle o inserire più record), l'utilizzo di una transazione è necessario, ma quando dobbiamo eseguire un solo comando, la situazione cambia. Quando dobbiamo persistere un solo oggetto e quindi generare un solo comando, il database gestisce autonomamente la transazione e EF può quindi evitare di crearne una esplicitamente risparmiando due round-trip con il database (uno per iniziare la transazione e uno per completarla). Per questo motivo, a partire da EF 7 quando si deve persistere un solo oggetto, i comandi per gestire la transazione non verranno più generati ottimizzando le performance. Il risultato è che il seguente codice genra un solo comando SQL.
using var ctx = new MyContext(); ctx.Customers.Add(customer); ctx.SaveChanges();
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare Locust con Azure Load Testing
Generare velocemente pagine CRUD in Blazor con QuickGrid
Recuperare App Service cancellati su Azure
Potenziare la ricerca su Cosmos DB con Full Text Search
Gestione file Javascript in Blazor con .NET 9
.NET Aspire per applicazioni distribuite
Ordinare randomicamente una lista in C#
Generare un hash con SHA-3 in .NET
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Supportare la sessione affinity di Azure App Service con Application Gateway
Collegare applicazioni server e client con .NET Aspire
I più letti di oggi
- Utilizzare il pattern matching per semplificare le espressioni
- Utilizzare requestAnimationFrame per animazioni fluide
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare WebJobs su Linux con Azure App Service
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!