EF Core SaveChanges拦截器怎么用 EF Core ISaveChangesInterceptor教程

星降
发布: 2025-12-23 11:40:03
原创
128人浏览过
SaveChanges拦截器是在调用SaveChanges或SaveChangesAsync前后自动触发的钩子,用于统一处理数据变更逻辑,如自动填充时间戳、审计日志、业务校验或阻止非法保存;通过AddInterceptors注册,实现ISaveChangesInterceptor接口的SavingChanges(保存前)和SavedChanges(保存后)方法。

ef core savechanges拦截器怎么用 ef core isavechangesinterceptor教程

SaveChanges拦截器是干什么的

它是在调用SaveChangesSaveChangesAsync前后自动触发的钩子,不用改DbContext代码就能统一处理数据变更逻辑。比如自动填充创建/更新时间、记录谁改了数据、做业务校验、写审计日志,甚至临时阻止非法保存。

怎么注册一个SaveChangesInterceptor

在DI容器配置DbContext时,用AddInterceptors方法注入实现类:

  • ASP.NET Core常规项目中,在Program.cs里这样写:

services.AddDbContext(options =>
  options.UseSqlServer(connectionString)
  .AddInterceptors(new AuditSaveChangesInterceptor()));

  • Aspire项目需用ConfigureDbContext避免服务解析问题:

builder.ConfigureDbContext((provider, options) =>
  options.AddInterceptors(provider.GetRequiredService()));

怎么写一个基础的拦截器

实现ISaveChangesInterceptor接口,重点关注两个方法:

办公小浣熊
办公小浣熊

办公小浣熊是基于商汤大语言模型的原生数据分析产品,

办公小浣熊 460
查看详情 办公小浣熊
  • SavingChanges:保存前触发,可修改实体状态、校验、或直接SuppressWithResult中断保存
  • SavedChanges:保存成功后触发,适合发通知、记日志、清理缓存

示例:自动设置UpdatedAt字段

public class AuditSaveChangesInterceptor : ISaveChangesInterceptor
{
  public InterceptionResult SavingChanges(DbContextEventData eventData, InterceptionResult result)
  {
    var context = eventData.Context;
    if (context != null)
    {
      var entries = context.ChangeTracker.Entries()
        .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);
      foreach (var entry in entries)
      {
        if (entry.State == EntityState.Added)
          entry.Entity.CreatedAt = DateTime.UtcNow;
        entry.Entity.UpdatedAt = DateTime.UtcNow;
      }
    }
    return result;
  }
  public void SavedChanges(DbContextEventData eventData, int result)
  {
    // 可在此处记录日志,比如“共保存5条记录”
  }
}

常见注意点

拦截器是无状态的,别在类里存实例字段;如需依赖服务(如ILogger),通过构造函数注入;多个拦截器按注册顺序执行;若在SavingChanges中返回带结果的InterceptionResult,EF会跳过后续操作——这适合做权限拦截或软删除替代。

基本上就这些。

以上就是EF Core SaveChanges拦截器怎么用 EF Core ISaveChangesInterceptor教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号