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
Potenziare Azure AI Search con la ricerca vettoriale
Determinare lo stato di un pod in Kubernetes
Implementare il throttling in ASP.NET Core
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Utilizzare la libreria Benchmark.NET per misurare le performance
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare le collection expression in C#
Usare lo spread operator con i collection initializer in C#
Disabilitare automaticamente un workflow di GitHub (parte 2)
Eseguire query verso tipi non mappati in Entity Framework Core
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)