@@ -511,7 +511,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
|
||||
{
|
||||
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
|
||||
SetCommonEntityAuditInfo();
|
||||
await AddAudit();
|
||||
|
||||
try
|
||||
@@ -595,85 +594,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime Update UserId
|
||||
/// </summary>
|
||||
private void SetCommonEntityAuditInfo()
|
||||
{
|
||||
|
||||
ChangeTracker.DetectChanges(); // Important!
|
||||
|
||||
// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环)
|
||||
var entities = ChangeTracker.Entries()
|
||||
.Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x => !typeof(DataInspection).IsAssignableFrom(x.Entity.GetType())).ToList();
|
||||
|
||||
foreach (var t in entities)
|
||||
{
|
||||
switch (t.State)
|
||||
{
|
||||
|
||||
case EntityState.Deleted:
|
||||
|
||||
break;
|
||||
case EntityState.Modified:
|
||||
|
||||
if (t.Entity is IAuditUpdate updateEntity1)
|
||||
{
|
||||
updateEntity1.UpdateTime = DateTime.Now;
|
||||
updateEntity1.UpdateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (t.Entity is ISoftDelete softDelete)
|
||||
{
|
||||
if (softDelete.IsDeleted)
|
||||
{
|
||||
softDelete.DeleteUserId = _userInfo.Id;
|
||||
softDelete.DeletedTime = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
softDelete.DeletedTime = null;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
//添加的时候,更新审计字段也赋值
|
||||
case EntityState.Added:
|
||||
|
||||
|
||||
if (t.Entity is IAuditAdd addEntity)
|
||||
{
|
||||
if (addEntity.CreateTime == default(DateTime))
|
||||
{
|
||||
addEntity.CreateTime = DateTime.Now;
|
||||
}
|
||||
|
||||
addEntity.CreateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (t.Entity is IAuditUpdate updateEntity)
|
||||
{
|
||||
updateEntity.UpdateTime = DateTime.Now;
|
||||
updateEntity.UpdateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (t.Entity is IAuditAddWithUserName addEntity3)
|
||||
{
|
||||
if (addEntity3.CreateTime == default(DateTime))
|
||||
{
|
||||
addEntity3.CreateTime = DateTime.Now;
|
||||
|
||||
}
|
||||
|
||||
addEntity3.CreateUserId = _userInfo.Id;
|
||||
addEntity3.CreateUser = _userInfo.RealName;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Diagnostics;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore;
|
||||
|
||||
public class AuditEntityInterceptor(IUserInfo _userInfo) : SaveChangesInterceptor
|
||||
{
|
||||
public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result)
|
||||
{
|
||||
AuditEntities(eventData.Context);
|
||||
|
||||
return base.SavingChanges(eventData, result);
|
||||
}
|
||||
|
||||
public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData,
|
||||
InterceptionResult<int> result, CancellationToken cancellationToken = default)
|
||||
{
|
||||
AuditEntities(eventData.Context);
|
||||
|
||||
return base.SavingChangesAsync(eventData, result, cancellationToken);
|
||||
}
|
||||
|
||||
public void AuditEntities(DbContext? context)
|
||||
{
|
||||
if (context == null) return;
|
||||
|
||||
// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环)
|
||||
foreach (var entry in context.ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Added))
|
||||
.Where(x => !typeof(DataInspection).IsAssignableFrom(x.Entity.GetType())).ToList())
|
||||
{
|
||||
switch (entry.State)
|
||||
{
|
||||
|
||||
case EntityState.Deleted:
|
||||
|
||||
break;
|
||||
case EntityState.Modified:
|
||||
|
||||
if (entry.Entity is IAuditUpdate updateEntity1)
|
||||
{
|
||||
updateEntity1.UpdateTime = DateTime.Now;
|
||||
updateEntity1.UpdateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (entry.Entity is ISoftDelete softDelete)
|
||||
{
|
||||
if (softDelete.IsDeleted)
|
||||
{
|
||||
softDelete.DeleteUserId = _userInfo.Id;
|
||||
softDelete.DeletedTime = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
softDelete.DeletedTime = null;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
//添加的时候,更新审计字段也赋值
|
||||
case EntityState.Added:
|
||||
|
||||
|
||||
if (entry.Entity is IAuditAdd addEntity)
|
||||
{
|
||||
if (addEntity.CreateTime == default(DateTime))
|
||||
{
|
||||
addEntity.CreateTime = DateTime.Now;
|
||||
}
|
||||
|
||||
addEntity.CreateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (entry.Entity is IAuditUpdate updateEntity)
|
||||
{
|
||||
updateEntity.UpdateTime = DateTime.Now;
|
||||
updateEntity.UpdateUserId = _userInfo.Id;
|
||||
}
|
||||
|
||||
if (entry.Entity is IAuditAddWithUserName addEntity3)
|
||||
{
|
||||
if (addEntity3.CreateTime == default(DateTime))
|
||||
{
|
||||
addEntity3.CreateTime = DateTime.Now;
|
||||
|
||||
}
|
||||
|
||||
addEntity3.CreateUserId = _userInfo.Id;
|
||||
addEntity3.CreateUser = _userInfo.RealName;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user