Molto spesso capita di voler loggare le operazioni di modifica al database per motivi di storicizzazione. Quando non si può centralizzare questa logica in una stored procedure, il modo migliore è ricorrere all'override del metodo SaveChanges della classe ObjectContext. In questo modo possiamo intercettare il momento in cui Entity Framework persiste le modifiche fatte agli oggetti ed agganciare la logica di logging.
Il primo passo consiste nel creare una classe che erediti da ObjectContext. Il secondo passo consiste nel fare l'override del metodo SaveChanges come nel seguente esempio.
public override int SaveChanges(SaveOptions options)
{
DetectChanges();
var result = base.SaveChanges(SaveOptions.None);
//codice di logging
AcceptAllChanges();
return result;
}Il metodo SaveChanges della classe base viene invocato passando SaveOptions.None così che quando il codice torna nel nostro metodo, lo stato delle entità non è impostato su Unchanged e possiamo così effettuare il log.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Microsoft Fabric: la piattaforma unificata per l'ecosistema dati moderno
Mappare una complex property di una entity su un campo JSON
Modificare lo stile in una QuickGrid Blazor
Blue/Green Release in locale con .NET Aspire
Ottimizzare le API in ASP.NET con Feature Flags
Configurare OpenTelemetry per Application Insights su ASP.NET Core
Utilizzare ExecuteUpdate per aggiornare colonne JSON in Entity Framework
Mischiare codice server side e client side in una query LINQ con Entity Framework
Monitorare le tabelle di Azure SQL Database con Change Event Streaming
Integrare email esterne con Azure Functions e Managed Connectors
Creare un extension method per applicare condizionalmente una Where in una query LINQ per Entity Framework
Testare le API di Azure Resource Manager con API Playground


