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
Creare una libreria CSS universale: Immagini
Recuperare App Service cancellati su Azure
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Utilizzare i primary constructor di C# per inizializzare le proprietà
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Combinare Container Queries e Media Queries
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Gestione dell'annidamento delle regole dei layer in CSS
I più letti di oggi
- Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
- Utilizzare StartsWith ed EndsWith con Span
- Utilizzare l nesting nativo dei CSS
- Microsoft lancia il nuovo tool gratuito 'ASP.NET Web Matrix Project'
- Managed deployment strategy in Azure DevOps
- Forzare l'apertura di un file fuori dal browser
- Configurare e gestire sidecar container in Azure App Service