Una delle richieste più comuni dei progetti è quella di avere a disposizione un log dei cambiamenti dei dati, di chi li ha fatti e quando. A seconda delle esigenze, questa operaione può essere estremamente semplice o complicata. In questo script prendiamo in esame un caso semplice in quando lo scenario complicato dipende dai singoli casi.
Quando dobbiamo creare un log, la prima cosa da fare è creare la classe che conterrà i log è mapparla nel context.
public class Log
{
public int Id { get; set; }
public string AccountId { get; set; }
public string EntityType { get; set; }
public DateTimeOffset EventTimestamp { get; set; }
public string Entity { get; set; }
}
public class MyContext : DbContext
{
public DbSet<AuditTrail> Trails { get; set; }
}La classe Log contiene l'utente che ha fatto la modifica, il tipo dell'entity, la data e l'entity serializzata in JSON.
La seconda cosa da fare è intercettare tutte le modifiche ai dati e salvarle nella tabella di log. In questi casi dobbiamo eseguire l'override del metodo SaveChanges, intercettare le entity aggiunte, modificate ed eliminate, creare un oggetto Log per ognuna di queste e persistere tutto insieme.
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
var entries = ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged);
foreach (var entry in entries.ToList())
{
var audit = new Log
{
EntityType = entry.Entity.GetType().Name,
EventTimestamp = DateTimeOffset.UtcNow,
EventDataDetails = JsonConvert.SerializeObject(changeDetails, SerializerSettings),
AccountId = ClaimsPrincipal.Current.Identity.Name
};
Trails.Add(audit);
}
return base.SaveChanges(acceptAllChangesOnSuccess)
}Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Esporre un server MCP con Azure API Management
Centralizzare gli endpoint AI Foundry con Azure API Management
Configurare OpenAI in .NET Aspire
Escludere alcuni file da GitHub Copilot
Mischiare codice server side e client side in una query LINQ con Entity Framework
Configurare automaticamente un webhook in Azure DevOps
Impostare la content-visibility in CSS per ottimizare il rendering iniziale di una pagina
Gestire progetti NPM in .NET Aspire
.NET Aspire per applicazioni distribuite
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Pubblicare un MCP Server in GitHub MCP Registry
I più letti di oggi
- .NET Campus - Roma
- .NET Conference Italia 2022 - Track in presenza - Milano
- Release Candidate 1 di Internet Explorer 8
- Windows Azure in versione 1.0: annunciata la piattaforma Microsoft per il cloud computing
- Disponibile la June 2011 CTP di Entity Framework
- Microsoft Security Bulletin MS02-043
- .NET vs J2EE? Secondo Microsoft non ci sono paragoni


