Quando dobbiamo aggiornare un record sul database utilizzando Entity Framework, la tecnica più semplice è quella di recuperare l'oggetto, modificarne le proprietà e invocare la persistenza. Se dobbiamo eseguire l'aggiornamento di molti record, questa tecnica può risultare molto pesante in quanto Entity Framework lancia una update per ogni record.
Per fare un esempio concreto, supponiamo di voler aggiornare tutti i prodotti in catalogo aumentando il prezzo del 1%. Utilizzando la tecnica appena descritta, dovremmo fare una query che torna tutti i prodotti (occupando molta memoria), modificare il prezzo di ogni prodotto e poi invocare la persistenza che lancerà una update per ogni prodotto.
In questi casi, la cosa migliore è utilizzare direttamente un comando SQL che aggiorna massivamente tutti i record sul database senza doverli nemmeno caricare in memoria. Questo comando SQL può essere lanciato tramite il metodo ExecuteCommand esposto dalla proprietà Database del contesto. Sebbene il codice sia molto semplice, ha lo svantaggio di non farci lavorare ad oggetti, ma di farci lavorare direttamente con il database. A partire da EF 7, possiamo utilizzare il metodo BulkUpdate per esprimere tramite lambda sia i campi da modificare sia le condizioni che devono rispettare i record che devono essere modificati così come mostrato nel seguente codice.
context.Products .Where(p => p.Category = "shoes") .ExecuteUpdate(p => p.SetProperty(x => x.Price, x => x.Price + (x.Price * (1 / 100))));
Il risultato di questo codice è un comando SQL che esegue una update massiva filtrando per categoria ed aggiornando il prezzo ottimizzando così utto il processo di aggiornamento e senza farci usare direttamente il codice SQL.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare il versioning con i controller di ASP.NET Core Web API
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Creare moduli CSS in React
.NET Conference Italia 2023
Eseguire query verso tipi non mappati in Entity Framework Core
Short-circuiting della Pipeline in ASP.NET Core
Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
Dependency Injection e custom validator in Blazor con .NET 7.0
Semplificare il deployment di siti statici con Azure Static Web App
Ottimizzare la persistenza che coinvolge un solo oggetto con Entity Framework Core 7
Utilizzare ChatGPT con Azure OpenAI
Confronto tra moduli in Javascript: ES e commonJS
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare i primary constructor in C#
- Installare le Web App site extension tramite una pipeline di Azure DevOps
- tra poco è la volta di #spa, #javascript e #angularjs per lo sviluppatore #aspnet con @sm15455: https://aspit.co/web15-live #aspilive
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- #vs2013, #windowsserver 2012 r2, #sqlserver 2014 e #tfs 2013 annunciati a #msteched. approfondimenti in seguito: https://aspit.co/amo