I'm building a Log feature for application and I want save entity data before and after change but I can't get version of entity before changes.
I tried answer here but ObjectStateManager
in IdentityDbContext
not found in .NET Core.
I'm building a Log feature for application and I want save entity data before and after change but I can't get version of entity before changes.
I tried answer here but ObjectStateManager
in IdentityDbContext
not found in .NET Core.
Override SaveChanges
and SaveChangesAsync
methods in IdentityDbContext
:
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
OnBeforeSaveChanges();
var result = base.SaveChanges(acceptAllChangesOnSuccess);
return result;
}
public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
{
OnBeforeSaveChanges();
var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
return result;
}
private void OnBeforeSaveChanges()
{
var entries = ChangeTracker
.Entries()
.Where(p => p.State == EntityState.Added || p.State == EntityState.Modified || p.State == EntityState.Deleted)
.ToList();
foreach (var entry in entries)
{
foreach (var property in entry.Properties)
{
var originalValue = property.OriginalValue;
var currentValue = property.CurrentValue;
}
}
}
For more info read this: Entity Framework Core: History / Audit table