AutoMapper 是 C# 中用于 DTO 与实体间映射的主流库,通过 Profile 配置和 IMapper 接口实现类型安全、可维护的自动映射,推荐使用依赖注入注册并启用 AssertConfigurationIsValid 验证。
AutoMapper 是 C# 中最常用的对象映射库,用来简化两个不同结构
的类(比如 DTO 和实体)之间的属性赋值。它不靠反射硬编码,而是通过配置一次、复用多次,让代码更干净、可维护性更高。
在 .NET 项目中,用 NuGet 安装 AutoMapper:
从 AutoMapper 12.0 开始,推荐使用 MapperConfiguration + IMapper 方式(替代旧版静态 Mapper)。在 Startup 或 Program.cs 中注册:
var mappingConfig = new MapperConfiguration(mc =>
{
mc.CreateMap();
mc.CreateMap();
});
var mapper = mappingConfig.CreateMapper(); 如果是 ASP.NET Core 项目,更推荐用依赖注入方式注册:
services.AddAutoMapper(typeof(Program)); // 扫描 Program 类所在程序集中的 Profile
把映射逻辑集中管理,避免配置散落在各处。新建一个继承 Profile 的类:
public class UserMappingProfile : Profile
{
public UserMappingProfile()
{
CreateMap()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
.ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.BirthDate.Year));
CreateMap()
.ForMember(dest => dest.BirthDate, opt => opt.Ignore()); // 忽略不映射的字段
}
}
Profile 会自动被 AddAutoMapper 发现并加载,无需手动添加。
执行映射操作
注入 IMapper 后直接调用:
-
mapper.Map(user) —— 对象转 DTO
-
mapper.Map(userDto, user) —— 更新已有对象(目标对象不为空)
-
mapper.Map>(users)
—— 集合映射(自动识别泛型)
注意:AutoMapper 默认按属性名匹配(忽略大小写),同名且类型兼容的字段自动复制;类型不一致或名称不同需用 ForMember 显式配置。
常见问题与建议
映射失败时不会抛异常,但可能静默跳过字段。建议开发阶段开启验证:
var config = new MapperConfiguration(c => c.AddProfile());
config.AssertConfigurationIsValid(); // 启动时检查映射是否合法
- 避免在映射中调用数据库或耗时操作,保持纯数据转换
- 敏感字段(如密码)记得用
Ignore() 或 MapFrom(x => null)
- 复杂嵌套对象支持深度映射,但要确保所有中间类型都有对应 CreateMap
基本上就这些。用熟了 Profile + IMapper,日常 DTO 转换几行代码搞定,不复杂但容易忽略验证和命名约定。
# 编码
# app
# 常见问题
# c#
# .net
# NULL
# 继承
# 接口
# 泛型
# map
# 对象
# 数据库
# 推荐使用
# 都有
# 已有
# 自动识别
# 更高
# 但要
# 跳过
# 最常用
# 启动时
# 熟了
相关文章:
公司网站设计制作厂家,怎么创建自己的一个网站?
营销式网站制作方案,销售哪个网站招聘效果最好?
用v-html解决Vue.js渲染中html标签不被解析的问题
javascript基本数据类型及类型检测常用方法小结
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何通过虚拟主机空间快速建站?
动图在线制作网站有哪些,滑动动图图集怎么做?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
大连网站制作公司哪家好一点,大连买房网站哪个好?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何快速使用云服务器搭建个人网站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何快速建站并高效导出源代码?
如何在宝塔面板中创建新站点?
javascript中的try catch异常捕获机制用法分析
建站之星2.7模板快速切换与批量管理功能操作指南
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站主机SSH密钥生成步骤及常见问题解答?
如何在云主机快速搭建网站站点?
郑州企业网站制作公司,郑州招聘网站有哪些?
北京专业网站制作设计师招聘,北京白云观官方网站?
建站之星导航配置指南:自助建站与SEO优化全解析
如何在云主机上快速搭建网站?
香港服务器选型指南:免备案配置与高效建站方案解析
广东企业建站网站优化与SEO营销核心策略指南
如何用免费手机建站系统零基础打造专业网站?
安云自助建站系统如何快速提升SEO排名?
定制建站流程步骤详解:一站式方案设计与开发指南
微课制作网站有哪些,微课网怎么进?
建站之星上传入口如何快速找到?
h5网站制作工具有哪些,h5页面制作工具有哪些?
c# 服务器GC和工作站GC的区别和设置
佛山企业网站制作公司有哪些,沟通100网上服务官网?
建站之星logo尺寸如何设置最合适?
如何在阿里云香港服务器快速搭建网站?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何通过NAT技术实现内网高效建站?
如何在Windows 2008云服务器安全搭建网站?
如何在宝塔面板中修改默认建站目录?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站之星备案流程有哪些注意事项?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
建站之星代理商如何保障技术支持与售后服务?
大型企业网站制作流程,做网站需要注册公司吗?
如何选择域名并搭建高效网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
*请认真填写需求信息,我们会在24小时内与您取得联系。