首页 > 解决方案 > 在更改日志之前获取实体

问题描述

我正在为应用程序构建日志功能,我想在更改之前和之后保存实体数据,但我无法在更改之前获取实体版本。

我在这里尝试回答,ObjectStateManagerIdentityDbContext.NET Core 中找不到。

标签: c#entity-framework

解决方案


覆盖SaveChangesSaveChangesAsync方法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;
        }
    }
}

有关更多信息,请阅读: 实体框架核心:历史/审计表


推荐阅读