SaveChanges拦截器是在调用SaveChanges或SaveChangesAsync前后自动触发的钩子,用于统一处理数据变更逻辑,如自动填充时间戳、审计日志、业务校验或阻止非法保存;通过AddInterceptors注册,实现ISaveChangesInterceptor接口的SavingChanges(保存前)和SavedChanges(保存后)方法。
它是在调用SaveChanges或SaveChangesAsync前后自动触发的钩子,不用改DbContext代码就能统一处理数据变更逻辑。比如自动填充创建/更新时间、记录谁改了数据、做业务校验、写审计日志,甚至临时阻止非法保存。
在DI容器配置DbContext时,用AddInterceptors方法注入实现类:
Program.cs里这样写:services.AddDbContext(options =>
options.UseSqlServer(connectionString)
.AddInterceptors(new AuditSaveChangesInterceptor()));
ConfigureDbContext避免服务解析问题:builder.ConfigureDbContext((provider, options) =>
options.AddInterceptors(provider.GetRequiredService()));
实现ISaveChangesInterceptor接口,重点关注两个方法:
SuppressWithResult中断保存示例:自动设置UpdatedAt字段
public class AuditSaveChangesInterceptor : ISaveChangesInterceptor
{
public InterceptionResult
ata eventData, InterceptionResult
{
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会跳过后续操作——这适合做权限拦截或软删除替代。
基本上就这些。
# app
# sqlserver
# .net
# red
# NULL
# if
# foreach
# 构造函数
# int
# void
# 接口
# class
# public
# var
# 拦截器
# 是在
# 更新时间
# 就能
# 多个
# 可在
# 如需
# 改了
# 跳过
# 重点关注
相关文章:
c# 在ASP.NET Core中管理和取消后台任务
如何自定义建站之星模板颜色并下载新样式?
建站之星导航配置指南:自助建站与SEO优化全解析
宝塔新建站点报错如何解决?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
如何用景安虚拟主机手机版绑定域名建站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
高防服务器租用首荐平台,企业级优惠套餐快速部署
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
常州企业网站制作公司,全国继续教育网怎么登录?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何在阿里云香港服务器快速搭建网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之星安装后如何自定义网站颜色与字体?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何选择高效响应式自助建站源码系统?
制作企业网站建设方案,怎样建设一个公司网站?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
如何快速搭建FTP站点实现文件共享?
宝塔建站无法访问?如何排查配置与端口问题?
建站之星安装后界面空白如何解决?
如何正确选择百度移动适配建站域名?
建站之星如何保障用户数据免受黑客入侵?
公司网站的制作公司,企业网站制作基本流程有哪些?
如何通过FTP服务器快速搭建网站?
如何通过万网虚拟主机快速搭建网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何用腾讯建站主机快速创建免费网站?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
广州美橙建站如何快速搭建多端合一网站?
已有域名和空间如何快速搭建网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
制作营销网站公司,淘特是干什么用的?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
已有域名能否直接搭建网站?
如何用搬瓦工VPS快速搭建个人网站?
家庭建站与云服务器建站,如何选择更优?
如何通过远程VPS快速搭建个人网站?
西安大型网站制作公司,西安招聘网站最好的是哪个?
西安专业网站制作公司有哪些,陕西省建行官方网站?
建站之星如何配置系统实现高效建站?
建站之星后台密码遗忘?如何快速找回?
高防服务器如何保障网站安全无虞?
如何获取上海专业网站定制建站电话?
已有域名如何免费搭建网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
,网页ppt怎么弄成自己的ppt?
建站之星如何取消后台验证码生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。