一、本周完整学习路线复盘
Day18 仓储模式 Repository Pattern
- 掌握 IRepository<T> 泛型仓储接口
- 封装 RepositoryBase<T> 通用 EF 实现
- 理解
DbContext.Set<T>()泛型获取表 - 学会基础 CRUD、条件查询、分页、批量删除 / 更新 (EF Core 7+
ExecuteDelete/ExecuteUpdate) - 规范分层:Domain 抽象仓储、Infrastructure 实现仓储
Day19 Service 业务层封装
- 分层铁律:Controller 只收参、Service 写业务、Repository 只操作数据
- 引入 IUnitOfWork 工作单元 统一管理 DbContext + 事务
- 解决自增 ID 痛点:
- 开事务
- Add 实体
SaveChanges()拿自增 ID(不提交事务)- 继续添加关联数据
- 最后统一
Commit,异常Rollback
- 完成用户模块:新增 / 修改 / 删除 / 分页 / 批量禁用 / 登录
Day20 AutoMapper 对象映射
- 分清 Entity / DTO / VO 职责
- Entity:只对应数据库,不对外暴露
- DTO:前端入参(Create/Update/Query)
- VO:后端返前端出参,隐藏敏感字段(密码)
- 学会
Profile统一配置映射规则- 同名字段自动映射
ForMember字段不同名映射、Ignore忽略字段- 单个对象、集合自动映射
- .NET 新版 AutoMapper 无废弃包注册方式
- 改造所有接口,杜绝手动赋值,全程 AutoMapper
Day21 本周收官
- 整套用户模块 API 全部完工
- 分层架构闭环:
Controller → Service → UnitOfWork → Repository → DbContext - 准备 Git 版本提交 + EF Core & 仓储高频面试复习
二、已完成用户模块功能清单
- 根据 ID 查询用户 + 嵌套角色信息
- 多条件动态分页查询用户
- 新增用户 + 分配角色(事务保障)
- 修改用户 + 重置角色关联(事务)
- 删除用户 + 级联删除角色关联(事务)
- 批量禁用用户(EF 批量更新)
- 账号密码登录校验
- 全部接口完成 DTO→Entity→VO AutoMapper 映射
- 统一返回封装
R<T>、分页返回统一结构
三、项目架构最终定型(你现在的企业级结构)
Domain
Entities 实体
Repositories 仓储接口
Infrastructure
Repositories 仓储实现
UnitOfWork 工作单元
AppDbContext 上下文
Application
Dtos 入参
Vos 出参
Services 业务服务
AutoMapper 映射Profile
API
Controllers 接口入口
核心规范:
- Service 不直接注入 DbContext,只依赖 IUnitOfWork
- 仓储只操作实体,不处理业务、不返回
R<T> - 禁止直接返回 Entity 给前端,一律用 VO
- 所有业务、事务、参数校验统一放 Service
四、Git 提交规范(直接照着提交)
提交描述文案
第三周完结:完成用户完整模块
1. 实现泛型仓储+工作单元事务
2. 封装UserService完整业务逻辑
3. 接入AutoMapper实现DTO/VO/Entity映射
4. 完成用户CRUD、分页、批量操作、登录接口
5. 规范分层架构,符合企业.NET后端标准
提交前检查
- 无冗余
NotImplementedException未实现方法 - 所有异步方法 async/await 规范
- 事务逻辑正确、能拿自增 ID、可正常回滚
- AutoMapper 映射无报错,接口可 Postman 正常调通
五、EF Core + 仓储 高频面试必背(精简版)
-
为什么用仓储模式?
解耦 EF Core 与业务层、复用通用 CRUD、面向接口易测试、统一数据访问规范,避免 Service 直接依赖 DbContext。
-
Repository 和 Service 区别?
Repository:单表数据访问,只操作实体;Service:业务逻辑、事务、多仓储协调、DTO 转换、参数校验。
-
工作单元 UOW 作用?
共享同一个 DbContext、统一管理事务、多仓储操作保证原子性,统一 SaveChanges 与提交回滚。
-
新增实体拿自增 ID 为什么可以在事务内 SaveChanges?
SaveChanges 只是执行 SQL 占用自增编号、写入事务临时区,未 Commit 前仍可回滚,不会真正落库。
-
EF Core ExecuteDelete/ExecuteUpdate 优势?
无需先查询加载实体,直接生成 SQL 批量删改,性能更高,无追踪开销。
-
为什么禁止直接返回 Entity 给前端?
暴露数据库敏感字段(密码、隐私字段)、字段冗余、后期数据库变更会影响前端,用 VO 隔离更安全易维护。
-
AutoMapper Profile 作用?
集中管理所有映射规则,统一配置字段映射、忽略、别名映射,解耦业务与映射逻辑。