第5章 数据支线:EF Core 与 LINQ 本章要回答的三个问题:一、手写 SQL(ADO.NET)与 ORM(EF Core)各自的代价与收益,真实项目怎么取舍?二、实体模型、DbContext、迁移这三件套是怎么把"改库表"变成"改代码"的?三、一段 LINQ 从写出来到变成 SQL 发给数据库,中间经历了什么、哪里会翻车? 为什么会有这一章 前四章的观察哨都在管线主线上,本章第一次拐进支线:页面背后的数据从哪来。控制器与页面模型里那些占位的仓储,要在这里换成真实现。数据层是 ASP.
本章要回答的三个问题:一、手写 SQL(ADO.NET)与 ORM(EF Core)各自的代价与收益,真实项目怎么取舍?二、实体模型、DbContext、迁移这三件套是怎么把"改库表"变成"改代码"的?三、一段 LINQ 从写出来到变成 SQL 发给数据库,中间经历了什么、哪里会翻车?
前四章的观察哨都在管线主线上,本章第一次拐进支线:页面背后的数据从哪来。控制器与页面模型里那些占位的仓储,要在这里换成真实现。数据层是 ASP.NET 应用里故障密度最高的层——慢查询、N+1、连接泄漏、并发覆盖——而这些故障的根源几乎都不是"框架不行",是对执行模型的误解:以为 LINQ 是内存操作、以为 DbContext 是线程安全的、以为迁移能随便回滚。
本章的观察哨装在两处:SQL 日志窗(看每段 LINQ 实际发了什么 SQL)与变更跟踪器(看上下文怎么记对象的每次改动)。这两个观察口比任何背诵都有效。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 5.1 从 ADO.NET 到 ORM 的取舍 | 第一个问题 | 手工数据层代码样例 + 选型论证框架 |
| 5.2 EF Core 建模与迁移实战 | 第二个问题 | 实体三件套 + 迁移全流程案例 |
| 5.3 LINQ 查询的执行真相 | 第三个问题 | SQL 观察实验 + N+1 复盘 |
三节是从手工到自动的连续谱:5.1 亲手摸一遍最底层的连接与命令(理解 ORM 在替你做什么),5.2 用建模与迁移把结构管理起来,5.3 打开查询的黑箱。5.3 是全章难度与价值峰值,慢查询排障能力直接来自这一节。
数据支线打通后,第 6 章的接口通道就能返回真实数据——接口层的分页、过滤、投影全部建立在本章 LINQ 之上。第 7 章的授权也会用到本章的用户表。数据层是各条管线的公共下游,本章的观察方法(SQL 日志窗)值得全程随身。