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
Il nuovo controllo Range di Blazor 9
Miglioramenti nell'accessibilità con Angular CDK
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Creare una libreria CSS universale: Nav menu
Creare una libreria CSS universale: Clip-path
Le novità di Angular: i miglioramenti alla CLI
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Sfruttare al massimo i topic space di Event Grid MQTT
Gestione degli stili CSS con le regole @layer
Change tracking e composition in Entity Framework
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
I più letti di oggi
- Effettuare shallow e deep copy di un reference type
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- Learn&Get 'Applicazioni del mondo reale con ASP.NET 2.0' - Milano
- Microsoft Security Bulletin di maggio 2008
- Preview 4 per ASP.NET MVC
- Speciale ASP.NET Charting: grafici per tutti i gusti!
- Resi noti i prezzi di Windows 7: in italiano dal 22 ottobre
- Il web per le masse: Microsoft presenta il nuovo editor gratuito WebMatrix
- Ritardo per il SP3 di Windows 2000
- UDDI, terza versione in arrivo