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
Creare moduli CSS in React
Elencare le container images installate in un cluster di Kubernetes
Creare form tipizzati con Angular
Eseguire query verso tipi non mappati in Entity Framework Core
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Short-circuiting della Pipeline in ASP.NET Core
Eseguire operazioni con timeout in React
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Verificare la provenienza di un commit tramite le GitHub Actions
Controllare gli accessi IP alle app con Azure Container Apps
Gestire undefined e partial nelle reactive forms di Angular