Ef-Core

EF Core 事务实战:SaveChanges、ExecutionStrategy、Outbox 与一致性边界

“事务加上了,这可不就问了嘛”。真正到线上一跑,问题就冒出来了: 数据库提交成功了,但消息没发出去 外部调用成功了,但本地事务回滚了 SQL 重试机制打开后,一段代码被重复执行了两次 同一个请求里明明都写在一起,最终状态还是不一致 这篇文章不讲抽象理论,直接回答一个工程问题:在 EF Core 里,事务边界到底该怎么画,哪些事情能靠数据库事务兜住,哪些事情必须换一种设计。 问题背景:为什么“写成功 …

EF Core 写入链路实战:从 ChangeTracker 到 SQL Batch 的性能诊断与优化

这篇文章讨论一个问题:一次写入请求从实体变更到数据库落盘,中间到底发生了什么,哪里最容易慢,以及应该怎么定位。 问题背景 真实场景:订单系统在白天吞吐稳定,凌晨高峰出现周期性尖峰。接口平均耗时变化不大,但 P95 从 80ms 抬到 420ms,数据库 CPU 也出现波峰。 排查后发现: 应用层每次批量处理 2000 条数据 循环中频繁触发变更检测 每条数据都单独 SaveChanges 最终生成 …

EF Core 原生 SQL 实战:FromSql、SqlQuery 与对象映射边界

做 EF Core 一段时间后,很多人都会遇到同一个节点:常规 LINQ 能覆盖大多数查询,但一到复杂报表、视图或者历史 SQL 复用场景,就会开始考虑原生 SQL。问题不在于“能不能写 SQL”,而在于怎么写得可维护、可观测、还能和 EF Core 的映射体系配合好。这篇文章讲解 FromSql、SqlQuery 的使用边界和对象映射的一些坑。 1. 问题背景:为什么原生 SQL 常常能跑但难以 …

EF Core 并发冲突处理实战:乐观锁、RowVersion 与 DbUpdateConcurrencyException

并发冲突是 EF Core 里最容易被忽视、出了事又最难排查的问题之一。这篇文章聊聊它的机制、怎么配置乐观锁、冲突异常怎么处理,以及几个工程上容易踩的坑。 问题背景 真实场景:电商平台秒杀活动,同一件商品被多个请求并发扣减库存。业务日志里一切正常,但库存对不上——扣了 100 件,实际库存只减少了 60 件。 排查后发现: 多个请求几乎同时读取了库存为 200 …

EF Core 慢查询排查实战:TagWith、OpenTelemetry 与执行计划

EF Core 性能问题里,最折磨人的不是“慢”,而是“慢得没规律”,线上卡,测试又无法复现。 很多小D、小W同学都经历过这种现场: 压测数据很好看 数据库 CPU 没打满 业务代码看起来也没什么大问题 你改了几个 Include,可能短期有效,但过两周又抖回来。根因往往不是某一行 LINQ 写错,而是整条排查链路没打通。 这篇文章就做一件事:给你一套能线上落地的 EF Core 慢查询定位闭环, …

EF Core 拦截器实战:SaveChangesInterceptor、CommandInterceptor 与审计落地

审计不是“给表补几个 CreatedBy 字段”,也不是“在业务方法里顺手记日志”。它本质上是系统级可追溯能力,设计目标是让系统在任何写路径下都能稳定回答四个问题:谁发起、改了什么、何时发生、通过哪条链路触发。 真正的难点不在 API 用法,而在系统设计阶段是否把审计定义成基础设施能力。这里聚焦两层落地:SaveChangesInterceptor 负责实体变更审 …

EF Core 查询性能实战:Include、投影与跟踪策略边界

很多团队把 EF Core 的性能问题归因于“ORM 天生慢”,但线上真实情况通常是: 查询写法对 SQL 形态不敏感 默认跟踪被滥用 图省事一次 Include 到底 结果是接口能跑,但高峰时段 P95 持续抬高,数据库 CPU 和网络带宽一起被拖上去。 这篇文章聚焦一个目标:把 EF Core 查询从“能查到数据”升级到“可预测、可解释、可优化”。 1. 问题背景:列表页为什么越改越慢 一个典 …

开发实战:ASP.NET Core + EF Core 实现动态可扩展的分页方案

引言 欢迎阅读,这篇文章主要面向初级开发者。 在开始之前,先问你一个问题:你做的系统,是不是每次增加一个查询条件或者排序字段,都要去请求参数对象里加一个属性,然后再跑去改 EF Core 的查询逻辑? 如果是,那这篇文章应该对你有用。我会带你做一个统一的、扩展起来不那么麻烦的分页查询方案。整体思路是四件事:​统一入参、统一出参、动态排序、动态过滤​。 …

开发实战:在 ASP.NET Core 与 EF Core 中,实现多租户数据隔离

在一个项目中,方便为多个客户提供服务,我们需要实现多租户系统。多租户系统,就是多个客户共享一个运行的项目实例,同时确保每个客户的数据安全隔离(你看不见我,我看不见你)。 这篇文章,我们将落地在 ASP.NET Core 和 Entity Framework Core 中,基于 TenantId 的全局过滤机制,实现多租户数据隔离。 原理解析 先确定隔离模型 多租户常见有三种模型: 每个租户一套数据 …