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 la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Migliorare l'organizzazione delle risorse con Azure Policy
Ridurre il reflow ottimizzando il CSS
Creare una libreria CSS universale: Nav menu
Loggare le query più lente con Entity Framework
Ottimizzare le performance usando Span<T> e il metodo Split
Gestire progetti .NET + React in .NET Aspire
Gestire il routing HTTP in Azure Container App
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Aggiornare a .NET 9 su Azure App Service
Anonimizzare i dati sensibili nei log di Azure Front Door
I più letti di oggi
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- .NET Conference Italia 2025 - Milano
- The Agentic Day - Milano
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!