Audit Trails Mechanism for EntityFramework Core
This library heavily influenced by a great blog post from GÉRALD BARRÉ.
I have attempted to segregate it a bit further.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuditTrails(options =>
{
options.HandleRecordAuditing(auditTrails =>
{
//Handle auditing based on your design
});
});
}
public class DatabaseContext : DbContext
{
private readonly AuditTrailService _auditTrailService;
public DatabaseContext(DbContextOptions<DatabaseContext> options, AuditTrailService auditTrailService) : base(options)
{
_auditTrailService = auditTrailService;
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken())
{
return _auditTrailService.SaveChangesAsync(dbContext =>
{
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
});
}
}
Default auditing behavior is ignored, we will need to specify the models we need use for auditing.
[Audit] //Includes model for auditing, any properties below are included.
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
[Audit(Ignore = true)] // Incase of not disable auditing in property please use ignore.
public DateTime CreatedOn { get; set; }
[Audit(Ignore = true)]
public DateTime? ModifiedOn { get; set; }
}