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
Miglioramenti alla leggibilità delle Media Query con le specifiche di livello 4
Impostare dinamicamente il nome di una run di un workflow di GitHub
Limitare lo spazio dei repository di Azure Container Registry con uno script bash e Azure CLI
Entity Framework è lento! mmmmh, probabilmente sei tu che lo stai usando male!
Taggare automaticamente un repository con un workflow di GitHub
Effettuare il pull di git LFS in un workflow di GitHub
Gestire la query string nell'output cache di ASP.NET Core
Condividere i workflow tra più repository in GitHub
Ricevere avvisi su metriche dei server Azure Arc
Recuperare la data di creazione e ultima modifica di un record con Entity Framework Core e le temporal table di SQL Server
Specificare il versioning nel path degli URL in ASP.NET Web API
Le novità di Entity Framework (Core) 7