第5章 数据支线:EF Core与LINQ


文档摘要

第5章 数据支线:EF Core 与 LINQ 本章要回答的三个问题:一、手写 SQL(ADO.NET)与 ORM(EF Core)各自的代价与收益,真实项目怎么取舍?二、实体模型、DbContext、迁移这三件套是怎么把"改库表"变成"改代码"的?三、一段 LINQ 从写出来到变成 SQL 发给数据库,中间经历了什么、哪里会翻车? 为什么会有这一章 前四章的观察哨都在管线主线上,本章第一次拐进支线:页面背后的数据从哪来。控制器与页面模型里那些占位的仓储,要在这里换成真实现。数据层是 ASP.

第5章 数据支线:EF Core 与 LINQ

本章要回答的三个问题:一、手写 SQL(ADO.NET)与 ORM(EF Core)各自的代价与收益,真实项目怎么取舍?二、实体模型、DbContext、迁移这三件套是怎么把"改库表"变成"改代码"的?三、一段 LINQ 从写出来到变成 SQL 发给数据库,中间经历了什么、哪里会翻车?

为什么会有这一章

前四章的观察哨都在管线主线上,本章第一次拐进支线:页面背后的数据从哪来。控制器与页面模型里那些占位的仓储,要在这里换成真实现。数据层是 ASP.NET 应用里故障密度最高的层——慢查询、N+1、连接泄漏、并发覆盖——而这些故障的根源几乎都不是"框架不行",是对执行模型的误解:以为 LINQ 是内存操作、以为 DbContext 是线程安全的、以为迁移能随便回滚。

本章的观察哨装在两处:SQL 日志窗(看每段 LINQ 实际发了什么 SQL)与变更跟踪器(看上下文怎么记对象的每次改动)。这两个观察口比任何背诵都有效。

读完能解决什么

  • 按项目规模、团队技能、性能要求三个维度,给出 ADO.NET 与 EF Core 的选型论证;
  • 建实体模型与 DbContext,用迁移把模型变更落成数据库结构变更;
  • 用日志观察窗读出任意 LINQ 的 SQL 翻译,识别 N+1 与全表加载;
  • 解释 IQueryable 与 IEnumerable 的分界线,预测一段查询在数据库端还是内存端执行;
  • 说出变更跟踪的工作方式与 AsNoTracking 的适用场景。

本章知识点清单

  • ADO.NET 四件套(连接、命令、读取器、参数化)的手工流程与参数化防注入;
  • ORM 的映射职责:对象图与关系表的互转、变更跟踪、身份映射;
  • 实体建模三要素:主键约定、导航属性、外键阴影属性;
  • DbContext 的职责边界:单元工作模式、一个请求一个上下文(衔接 2.1 节 Scoped 生命周期);
  • 迁移工作流:新增迁移、检视脚本、应用与回滚的顺序纪律;
  • 查询执行模型:IQueryable 延迟执行、翻译时机、客户端求值退化的识别;
  • 加载策略三分法:预先加载 Include、显式加载、延迟加载的风险;
  • AsNoTracking、投影 Select 提前收窄列与行;
  • 并发基础:乐观并发标记的原理,为第 6 章接口的并发冲突处理铺路。

各节怎么分工

回答哪个问题 关键产出
5.1 从 ADO.NET 到 ORM 的取舍 第一个问题 手工数据层代码样例 + 选型论证框架
5.2 EF Core 建模与迁移实战 第二个问题 实体三件套 + 迁移全流程案例
5.3 LINQ 查询的执行真相 第三个问题 SQL 观察实验 + N+1 复盘

三节是从手工到自动的连续谱:5.1 亲手摸一遍最底层的连接与命令(理解 ORM 在替你做什么),5.2 用建模与迁移把结构管理起来,5.3 打开查询的黑箱。5.3 是全章难度与价值峰值,慢查询排障能力直接来自这一节。

本章贯穿的订单域实体关系

先决条件

  • 理解第 2 章 Scoped 生命周期——DbContext 按请求存活的理由在 2.1 节;
  • 会用任意关系型数据库的基本 SQL(增删改查、连接);
  • 本地装一种 EF Core 支持的数据库(示例用 SQLite,零安装成本,实验最顺手)。

往下走到哪

数据支线打通后,第 6 章的接口通道就能返回真实数据——接口层的分页、过滤、投影全部建立在本章 LINQ 之上。第 7 章的授权也会用到本章的用户表。数据层是各条管线的公共下游,本章的观察方法(SQL 日志窗)值得全程随身。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U