EF Core全局统一修改实体
在DBContext类下,重写SaveChangesAsync方法,并插入修改实体逻辑,参考代码如下:
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
{
OnBeforeSaving();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
private void OnBeforeSaving()
{
foreach (var entry in ChangeTracker.Entries())
{
var entityType = entry.Entity.GetType();
// 软删除逻辑
if (typeof(ISoftDelete).IsAssignableFrom(entityType))
{
if (entry.State == EntityState.Deleted)
{
entry.State = EntityState.Modified;
entry.CurrentValues["isdeleted"] = true;
}
}
// 自动更新时间与更新人
if (entry.State == EntityState.Modified)
{
// 判断是否有 LastModificationTime 属性
var lastModificationTimeProp = entry.Properties.FirstOrDefault(p => p.Metadata.Name == "LastModificationTime");
if (lastModificationTimeProp != null)
{
lastModificationTimeProp.CurrentValue = DateTimeOffset.UtcNow;
}
// 判断是否有 Updater 属性
var updaterProp = entry.Properties.FirstOrDefault(p => p.Metadata.Name == "Updater");
if (updaterProp != null)
{
// 你可以根据实际情况获取当前用户
updaterProp.CurrentValue = "system"; // 或 _currentUser.UserName
}
// 判断是否有 UpdaterName 属性
var updaterNameProp = entry.Properties.FirstOrDefault(p => p.Metadata.Name == "UpdaterName");
if (updaterNameProp != null)
{
// 你可以根据实际情况获取当前用户名称
updaterNameProp.CurrentValue = "系统"; // 或 _currentUser.Name
}
}
}
}

浙公网安备 33010602011771号