0

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.

Mohsen Esmailpour
  • 9,428
  • 1
  • 37
  • 60
Dat Nguyen
  • 696
  • 1
  • 5
  • 14

1 Answers1

0

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

Mohsen Esmailpour
  • 9,428
  • 1
  • 37
  • 60