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
Hosting di componenti WebAssembly in un'applicazione Blazor static
Generare file per il download da Blazor WebAssembly
Disabilitare automaticamente un workflow di GitHub
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Semplificare il deployment di siti statici con Azure Static Web App
Reactive form tipizzati con FormBuilder in Angular
Configurare policy CORS in Azure Container Apps
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Effettuare il binding di date in Blazor
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Come migrare da una form non tipizzata a una form tipizzata in Angular
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs