c# - 在更改日志之前获取实体
问题描述
我正在为应用程序构建日志功能,我想在更改之前和之后保存实体数据,但我无法在更改之前获取实体版本。
我在这里尝试回答,但ObjectStateManager
在IdentityDbContext
.NET Core 中找不到。
解决方案
覆盖SaveChanges
和SaveChangesAsync
方法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;
}
}
}
有关更多信息,请阅读: 实体框架核心:历史/审计表
推荐阅读
- python - 为什么 pyinstaller 在脚本执行时会在方法上抛出错误而没有错误?
- python - 在表单向导 Django 和多对多字段中保存多个图像不起作用
- flutter - 我在我的颤振项目中遇到清单错误,如何解决这个问题?
- android - 从 Java 类调用 Kotlin 协程构建器
- node.js - Gulp 4 错误:“您是否忘记发出异步完成信号?”
- laravel-5 - 如何在 laravel 刀片文件中有条件地 webpack 混合 Vue 应用程序
- python - 从列表中过滤掉任何值。这段代码是如何工作的?
- hyperledger-fabric - 隐式策略评估失败 - 满足 0 个子策略,但该策略需要满足 1 个“作家”子策略
- python - 将带有参数的函数应用于数据帧
- android - 不可转换的类型;无法将 'android.support.v4.app.Fragment' 转换为 'com.google.android.gms.maps.SupportMapFragment