Day20:AutoMapper 对象映射

一、今日学习目标

  1. 分清 Entity / DTO / VO 到底是什么
  2. 安装 + 配置 AutoMapper
  3. Profile 配置映射规则 Profile 完整用法
  4. 所有接口 改成:不直接返回实体,统一返回 VO/DTO
  5. 学会字段名不同、嵌套对象、列表的映射

二、核心概念(极简版)

1. 三个对象到底干嘛的?

表格

对象 全称 作用 位置
Entity 实体 对应数据库表 Domain
DTO 数据传输对象 接收前端参数 Application
VO 视图对象 返回给前端的数据 Application

一句话:前端 → DTO → Service → Entity → Service → VO → 前端

2. AutoMapper 干什么?

自动把:

  • User → UserVO
  • UserCreateDto → User
  • List<User> → List<UserVO>

不用再写:

cs 复制代码
var vo = new UserVO();
vo.Id = user.Id;
vo.Name = user.Name;

三、高频面试题 + 答案

1. 为什么要用 AutoMapper?

答案

  • 减少重复赋值代码
  • 让业务代码更干净
  • 支持复杂类型、嵌套映射
  • 企业标准,提升开发效率

2. DTO 和 VO 有什么区别?

答案

  • DTO:前端传给后端(入参)
  • VO:后端返回给前端(出参)
  • Entity:数据库实体,绝不直接返回给前端

3. AutoMapper 映射规则是什么?

答案 :默认按字段名相同映射,不区分大小写:

字段名不同可以用 ForMember 配置。

4. 什么是 Profile?

答案 :统一存放所有映射规则的配置类,方便维护。

5. 可以映射子对象吗?

答案:可以,自动映射嵌套类,也可以手动配置。


四、今日实战练习:所有接口使用 AutoMapper(必须完成)

练习目标

把你Day19 的所有用户接口全部升级:

  1. Controller 不接收 Entity,只接收 DTO
  2. Service 不返回 Entity,只返回 VO
  3. 全部使用 AutoMapper 映射
  4. 禁止任何手动 .Id=xx .Name=xx 赋值

你必须创建这些类

1. DTO(前端 → 后端)

  • UserCreateDto
  • UserUpdateDto
  • UserPageQueryDto
  • LoginDto

2. VO(后端 → 前端)

  • UserVO
  • UserDetailVO(带角色)
  • RoleVO
  • PageVO 分页统一返回

3. 映射配置

  • AutoMapperProfile:配置所有映射

4. 改造全部接口

  • 新增:接收 UserCreateDto → 映射成 User
  • 查询:返回 UserVO / UserDetailVO
  • 分页:返回 PageVO<List<UserVO>>

规范要求

  • Entity 绝不暴露到前端
  • 所有入参出参都用 DTO/VO
  • 映射全部交给 AutoMapper
  • Controller、Service 无手动赋值
相关推荐
van久7 小时前
Day23 登录 + 颁发 Token(DDD 四层架构 + 企业标准)
.netcore
wangl_921 天前
C#性能优化完全指南 - 从原理到实践
开发语言·性能优化·c#·.net·.netcore·visual studio
宝桥南山5 天前
GitHub Models - 尝试一下使用GitHub Models
microsoft·ai·微软·c#·github·.netcore
武藤一雄5 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
van久9 天前
Day19:Service 业务层(企业架构核心)
.netcore
武藤一雄9 天前
WPF中逻辑树(Logical Tree)与可视化树(Visual Tree)到底是什么
microsoft·c#·.net·wpf·.netcore
武藤一雄13 天前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
van久14 天前
Day17:EF Core 增删改 + 事务
.netcore
MoFe115 天前
【.net core】【watercloud】处理rabbitmq类初始化时获取系统已注入的数据库连接问题(调用已注入服务)
数据库·rabbitmq·.netcore