Il metodo SaveChanges della classe DbContext è virtuale e quindi possiamo eseguirne l'override nella classe di contesto che creiamo nei nostri progetti. Grazie a questa caratteristica possiamo eseguire operazioni prima e dopo l'effettiva persistenza dei dati sul database.
Un tipico esempio in cui questa funzionalità torna utile è quando vogiamo ripulire le stringhe inserite dall'utente da caratteri speciali prima che questi vengano persistiti. Il seguente esempio mostra come sfruttare il metodo SaveChanges per raggiungere tale scopo.
public override int SaveChanges() { var entries = this.ChangeTracker.Entries().Where( c => c.State == EntityState.Added || c.State == EntityState.Modified); foreach (var entry in entries) { foreach (var propertyName in entry.CurrentValues.PropertyNames) { var property = entry.Property(propertyName); if (property.IsModified && property.CurrentValue is string) { string r = "[\x00-\x08\x0B\x0C\x0E-\x1F]"; property.CurrentValue = Regex.Replace( property.CurrentValue.ToString(), r, "", RegexOptions.Compiled); } } } return base.SaveChanges(); }
Prima che si esegua la persistenza, vengono recuperate tutte le entry nel DbContext che devono essere modificate o aggiunte sul database. Per ogni entry si scorrono le proprietà. Su quelle che sono di tipo stringa e modificate viene eseguita una regular expression per eliminare i valori non consentiti. Alla fine si invoca il l'implementazione di base di SaveChanges per eseguire la persistenza.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Creare agenti facilmente con Azure AI Agent Service
Aggiornare a .NET 9 su Azure App Service
La gestione della riconnessione al server di Blazor in .NET 9
Gestire progetti .NET + React in .NET Aspire
Esporre un server MCP esistente con Azure API Management
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Creare una libreria CSS universale: Nav menu
Combinare Container Queries e Media Queries
Centralizzare gli endpoint AI Foundry con Azure API Management