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
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Change tracking e composition in Entity Framework
Collegare applicazioni server e client con .NET Aspire
Referenziare un @layer più alto in CSS
Triggerare una pipeline su un altro repository di Azure DevOps
Simulare Azure Cosmos DB in locale con Docker
Gestione dell'annidamento delle regole dei layer in CSS
Estrarre dati randomici da una lista di oggetti in C#
Utilizzare Copilot con Azure Cosmos DB
Escludere alcuni file da GitHub Secret Scanning
I più letti di oggi
- a #RealCodeConf4 il 25 maggio a Firenze parleremo di #silverlight4. iscrizioni gratis su http://u.aspitalia.com/g9
- #HTML5 schema per avere l'intellisense su #VS2008 (anche express) http://u.aspitalia.com/ed
- Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
- Rendere sicuro l'endpoint di HealthCheck in ASP.NET Core
- prime app per #wp7summer. vuoi fare strada con #wp7? 5 app e partecipi alla nostra nuova competition: http://aspitalia.com/yu #wp7dev
- disponibile #azure sdk 2.1, con supporto a #vs13 e nuovi tool per #vs12: https://aspit.co/ans