You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何添加多个SaveChangesInterceptor?审计拦截器生效软删除拦截器未执行

解决EF Core多个SaveChangesInterceptor仅一个生效的问题

问题原因

你已将两个拦截器注册到依赖注入容器,但EF Core不会自动将所有注册的SaveChangesInterceptor实例关联到DbContext。必须显式将拦截器添加到DbContext的配置中,否则只有被添加的拦截器会生效。

解决方案

修改DbContext的注册代码,在配置选项中通过AddInterceptors方法同时注入两个拦截器:

services.AddDbContext<YourDbContext>((serviceProvider, options) =>
{
    // 替换为你的数据库连接配置
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
           // 添加两个拦截器
           .AddInterceptors(
               serviceProvider.GetRequiredService<AuditableEntitySaveChangesInterceptor>(),
               serviceProvider.GetRequiredService<SoftDeletableEntitySaveChangesInterceptor>()
           );
});

额外注意事项

  • 拦截器执行顺序:上述代码中软删除拦截器会先执行,将Deleted状态改为Modified,之后审计拦截器会捕获到Modified状态的实体,自动更新LastModified和LastModifiedBy字段,这个顺序符合业务逻辑。
  • 实体继承关系:确保BaseAuditableSoftDeletableEntity继承自BaseAuditableEntity,这样软删除后的实体能被审计拦截器正确处理。
  • 目标实体类型:测试删除操作时,要确保被删除的实体确实是BaseAuditableSoftDeletableEntity的实例,否则软删除拦截器的Entries<BaseAuditableSoftDeletableEntity>()不会匹配到对应的实体条目。
  • Scope一致性:保持拦截器的注册范围(Scoped)与DbContext一致,避免生命周期不匹配的问题。

内容的提问来源于stack exchange,提问作者Ayman Hussam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:52:10