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
Utilizzare DeepSeek R1 con Azure AI
Creare una libreria CSS universale: i bottoni
Aggiornare a .NET 9 su Azure App Service
Supportare la sessione affinity di Azure App Service con Application Gateway
Gestire gli accessi con Token su Azure Container Registry
Testare il failover sulle region in Azure Storage
Implementare il throttle in JavaScript
Introduzione alle Container Queries
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Selettore CSS :has() e i suoi casi d'uso avanzati
Eseguire script pre e post esecuzione di un workflow di GitHub
Gestire progetti NPM in .NET Aspire
I più letti di oggi
- Finalmente anche Silverlight 4.0 è RTW!
- Windows Phone 7 è in RTM
- Disponibile l'SDK per Windows Phone 7.8
- Nuove pubblicazioni dal 3 Settembre
- Rilasciata la versione 1.1 di Fujitsu NetCOBOL
- Microsoft Security Bulletin MS03-046
- Microsoft Security Bulletin MS03-047
- Da oggi ASPItalia.com gira su Windows Server 2003
- SP1 per il .NET Framework
- Speciale ATLAS: AJAX con ASP.NET 2.0


