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
Operazioni tra insiemi di array in Javascript
Creare un file Zip partendo da uno stream sfruttando le classi del namespace System.IO.Compression
Integrare email esterne con Azure Functions e Managed Connectors
Sfruttare le regular expression in SQL Server 2025: la funzione REGEXP_LIKE
Gestire pubblicazione Kubernetes tramite .NET Aspire
How to be a DevOps engineer in the AI era
Eseguire i pre-commit hook di git con dependabot
Microsoft Fabric: la piattaforma unificata per l'ecosistema dati moderno
Impostare la content-visibility in CSS per ottimizare il rendering iniziale di una pagina
Blazor e InputHidden in .NET 10
Integrare OpenTelemetry direttamente in Azure Monitor
Azure SQL Database per dev: tutte le novità da non perdere


