对于我们项目中经常使用ModifyUser 和ModifyDateTime 用来记录表的修改用户和修改时间
如果在接口中经常写这些常用地字段,会增加我们代码臃肿。我可以用EF core 的监听器来监听
SaveChange的时候修改这些字段,这样我们就不用管这些需要的字段啦
这是例子
首先建立一个接口,定义这些常用的字段
public interface IModify
{
public string ModifyUser { get; set; }
public DateTime ModifyDateTime { get; set; }
}
需要用里面的字段的继承这个接口
public class CompanyId: IModify
{
public Guid Id{ get; set; }
public string Title { get; set; }
public string CreateUser { get; set; }
public DateTime CreateDateTime { get; set; }
public string ModifyUser { get; set; }
public DateTime ModifyDateTime { get; set; }
}
我们需要定义一个类,这个类需要继承 SaveChangesInterceptor
public class SetAubitInterceptor : SaveChangesInterceptor
{
public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result)
{
foreach (var entriy in eventData.Context.ChangeTracker.Entries())
{
if(entriy.Entity is IModify aubit)
{
aubit.ModifyUser = "GGK";
aubit.ModifyDateTime = DateTime.Now;
}
}
return base.SavingChanges(eventData, result);
}
}
我们需要在DbContext 类中的 OnConfiguring 方法中添加这个继承SaveChangesInterceptor 的这个类
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.AddInterceptors(new SetAubitInterceptor());
base.OnConfiguring(optionsBuilder);
}
这样我们在 SaveChanges() 的时候就会执行 SetAubitInterceptor 类如果是继承了 IModify 接口就会 对这个里面的字段进行赋值