【个人博客搭建】(21)使用AutoMap对象映射

在.NET WebAPI项目中,使用AutoMap进行对象映射是一种高效的数据处理方式。通过自动映射机制,可以极大地简化对象之间的转换过程,提高代码的可维护性和整洁性。下面将详细探讨如何在.NET WebAPI中使用AutoMap进行对象映射:

  1. 安装和配置
    • 安装AutoMapper包:需要通过NuGet包管理器安装AutoMapper及其相关依赖包。这包括AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection,后者支持依赖注入功能。
    • 配置服务:在Startup类的ConfigureServices方法中添加AutoMapper服务。使用services.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)))注册AutoMapper,并指定包含映射配置文件的程序集。
  2. 创建映射规则
    • 定义映射配置文件:创建继承自Profile的配置文件类,如AutoMapperConfigs,在该类中定义具体的映射规则。例如,使用CreateMap<DBPoundSheet, PoundSheetViewModel>()CreateMap<PoundSheetViewModel, DBPoundSheet>()来创建双向映射。
    • 配置复杂映射:对于具有不同字段名称或需要进行特殊处理的映射,可以使用ForMember方法指定字段的映射规则。例如,从动态JSON数据映射到模型时,可以使用JToken类结合LINQ查询式来实现复杂的映射逻辑。
  3. 实现映射操作
    • 注入IMapper依赖:在需要执行映射操作的服务或控制器中,通过构造函数注入IMapper接口实例。确保在类的开始部分声明私有只读的IMapper字段,以供类的其他方法使用。
    • 执行映射操作:使用IMapper实例的Map方法来执行实际的对象映射。例如,将PoundSheetViewModel对象转换为DBPoundSheet对象,可以使用_mapper.Map<DBPoundSheet>(model)来实现单个对象的转换。对于集合对象的转换,同样适用此方法。
  4. 优化和维护
    • 更新映射配置:随着项目的发展,可能需要修改或增加新的映射规则。这时只需更新或扩展已有的映射配置文件,无需手动修改多处代码,大大简化了维护工作。
    • 性能考虑:虽然AutoMapper提供了便利的配置和使用方式,但在某些高性能要求的场景下,仍需注意映射操作的性能影响,避免不必要的复杂映射或频繁的映射操作。

总之,通过上述步骤,可以有效地在.NET WebAPI项目中利用AutoMap进行对象映射,从而提高开发效率和项目的可维护性。

1、新建映射文件类:AutoMapperSetting,继承Profile

public class AutoMapperSetting : Profile{//调用CreateMap<A, B>()时,//A代表源对象类型,而B代表目标对象类型。//这意味着属性和值将从A复制到B。//可添加相反的关系,public AutoMapperSetting(){#region 【组织架构】SysOrganization//CreateMap<SysOrgPageDto, SysOrganization>();CreateMap<SysOrganization, SysOrgPageDto>();//CreateMap<SysOrganization, AddOrgParameters>();CreateMap<AddOrgParameters, SysOrganization>();//CreateMap<SysOrganization, UpdateOrgParameters>();CreateMap<UpdateOrgParameters, SysOrganization>();CreateMap<SysOrganization, UI_TreeSelectDto>().ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Id)).ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Name));#endregion#region 【系统菜单】SysMenuCreateMap<SysMenu, SysMenuPageDto>();CreateMap<AddSysMenuParameters, SysMenu>();CreateMap<UpdateSysMenuParameters, SysMenu>();CreateMap<SysMenu, UI_TreeSelectDto>().ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Id)).ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Name));CreateMap<SysMenu, SysMenuRouterDto>();#endregion#region 【角色】SysRoleCreateMap<AddSysRoleParameters, SysRole>();CreateMap<UpdateSysRoleParameters, SysRole>();#endregion#region 【自定义配置】CustomConfigCreateMap<AddCustomConfigParameters, CustomConfig>();CreateMap<UpdateCustomConfigParameters, CustomConfig>();#endregion#region 【相册】AlbumsCreateMap<AddAlbumsParameters, Albums>();CreateMap<UpdateAlbumsParameters, Albums>();#endregion#region 【照片】PicturesCreateMap<AddPicturesParameters, Pictures>();#endregion#region 【标签】TagsCreateMap<AddTagsParameters, Tags>();CreateMap<UpdateTagsParameters, Tags>();#endregion#region 【栏目】CategoriesCreateMap<AddCategoriesParameters, Categories>();CreateMap<UpdateCategoriesParameters, Categories>();CreateMap<Categories, CategoriesPageDto>();#endregion#region 【标签】TagsCreateMap<AddTalksParameters, Talks>();CreateMap<UpdateTalksParameters, Talks>();#endregion#region 【友情链接】TagsCreateMap<AddFriendLinkParameters, FriendLink>();CreateMap<UpdateFriendLinkParameters, FriendLink>();#endregion#region 【文章】ArticleCreateMap<AddArticleParameters, Article>();CreateMap<UpdateArticleParameters, Article>();#endregion#region 【评论/留言】CommentsCreateMap<AddCommentsParameters, Comments>();#endregion}}

        在案例中,就可以对字段名相同的值进行映射了,

        同时也可以对不同名称的字段名称进行指定的映射。

2、添加注入

#region AutoMapper 映射builder.Services.AddAutoMapper(typeof(AutoMapperSetting));#endregion

 3、使用:

        3.1、构造函数引入

        private readonly Repository<SysOrganization> _orgRep;private readonly IHttpContextUser _user;private readonly IMapper _mapper;public SysOrganizationService(Repository<SysOrganization> orgRep, IHttpContextUser user, IMapper mapper){_orgRep = orgRep;_user = user;_mapper = mapper;}

         3.2、映射:这里以新增为例。

 /// <summary>/// 添加组织机构/// </summary>/// <param name="dto"></param>/// <returns></returns>public async Task<ApiResult> AddOrg(AddOrgParameters para){var orgEntity = _mapper.Map<SysOrganization>(para);orgEntity.CreatedTime = DateTime.Now;orgEntity.CreatedUserId = _user.userId;var bl = await _orgRep.InsertAsync(orgEntity);if (!bl){return ApiResultHelper.Error();}return ApiResultHelper.Success();}

4、其他:

        以上就是简单的应用了。

        另外,也有其他的映射工具nuget包可以达到我们的要求,例如:Mapster、

5、todo

        另外今天也是2024高考的第一天,也祝广大学子高考加油!顺利!考出好成绩!

        (他们应该要4个月之后才可能看到到吧?~ 超小声疑问)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备&#xff0c;保持设备始终在线对网络运维人员来说至关重要&#xff0c;然而一个一个登录检查&#xff0c;或者一个一个ping并不明智&#xff0c;累人且效率极低&#xff0c;并出错率高。花钱买检测服务当我没说。 shell编…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件&#xff0c;而且还不能用亚博的图像操作库函数了&#xff0c;这十分不友好&#xff0…

Web前端从什么学起:探索前端世界的起点与路径

Web前端从什么学起&#xff1a;探索前端世界的起点与路径 在数字化浪潮席卷而来的今天&#xff0c;Web前端技术作为构建用户界面的核心力量&#xff0c;日益受到人们的关注。对于初学者来说&#xff0c;Web前端的学习旅程可能充满了未知与挑战。那么&#xff0c;Web前端究竟应…

liunx查看日志

tail查看日志 tail 查看文件的末尾部分 -f 实时监控日志文件的更新&#xff0c;如果有新的日志将会实时显示 -n 查看日志的后n行 tail -fn 100 filename.log // 实时查看filename.log的最后100行head查看日志 head 查看日志的头部 -n 指定查看行数 head -n 100 filename.log…

vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印,支持页眉、页尾、分页的自定义模板

Vxe UI vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印&#xff0c;支持页眉、页尾、分页的自定义模板 官方文档 https://vxeui.com 查看 github、gitee 页眉-自定义标题 说明&#xff1a;vxe-print-page-break标签用于定义分页&#xff0c;一个标签一页内容&#xff0c;超…

c语言基础篇B

B1.数据的输入与输出 c语言本身不提供输入输出语句&#xff0c;输入和输出操作是由c函数库中的函数来实现的在使用系统库函数时&#xff0c;要用预编译命令“#include”将有关的“头文件”包括到用户源文件中 include"stdio.h"或者include B2.printf()函数&#x…

Python怎么分开画图:深入探索与实战应用

Python怎么分开画图&#xff1a;深入探索与实战应用 在Python的数据可视化领域&#xff0c;分开画图是一项至关重要的技能。它能够帮助我们更清晰、更有条理地展示数据&#xff0c;进而发现数据中的规律和趋势。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;详…

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【全网独家 + 降本增效】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; SimRepCSP 类似于 YOLOv7的主干网络&#xff0c;由卷积模块和重参数化卷积&#xff08;RepConv&#xff09;模块组合而成&#xff0c;以 Cro…

WPF Command 的使用

一、Command类的创建 >> 构造函数方法中传入了一个委托 public class MyCommand : ICommand { public readonly Action _action; public MyCommand(Action action) { this._action action; } public event EventHandler CanExecuteChanged;…

学习使用 Frida 过程中出现的问题

一、adb shell命令报错&#xff1a;error: no devices found 目前该问题解决方法仅供参考&#xff0c;可先看看再选择试试&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 查看此电脑也会发现没有出现手机型号文件夹。 第一步&#xff1a; 检查一下手机开了u…

谷神后端代码模板:导入

SELECT NULL AS MID,NULL AS FILE_NAME,NULL AS FILE_PATH FROM DUAL;

【打印100个常用Linux命令】

#!/bin/bash 定义一个函数&#xff0c;用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令&#xff1a;” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …

qmt量化交易策略小白学习笔记第16期【qmt编程之获取北向南向资金(沪港通,深港通和港股通)】

qmt编程之获取北向南向资金 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 北向南向资金&#xff08;沪港通&#xff0c;深港通和港股通&#xff09; #北向南向资金交易日历 获取交易日列表…

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成

【CentOS 7】CentOS 7极致指南&#xff1a;高级部署PyCharm 2022.3.3专业版&#xff0c;实现定制化配置与无缝桌面集成 大家好 我是寸铁&#x1f44a; 总结了一篇CentOS 7极致指南&#xff1a;高级部署PyCharm 2022.3.3专业版&#xff0c;实现定制化配置与无缝桌面集成✨ 喜欢的…

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候&#xff0c;就会用到 最小二乘法 .根据矩阵A的情况&#xff0c;有如下四种方法 在r n m 时&#xff0c;SVD奇异…

Day16—API爬取与数据整合

在网络爬虫的领域,API(应用程序编程接口)提供了一种更为直接和高效的方式来获取数据。与直接从网页内容中提取数据相比,API通常提供更结构化、更易于解析的数据格式。 1. API爬取的优势 速度:API请求通常比网页加载更快,因为它们返回的是数据本身,而不是包裹数据的HTML…

计算机网络-数制转换与子网划分

目录 一、了解数制 1、计算机的数制 2、二进制 3、八进制 4、十进制 5、十六进制 二、数制转换 1、二进制转十进制 2、八进制转十进制 3、十六进制转十进制 4、十进制转二进制 5、十进制转八进制 6、十进制转十六进制 三、子网划分 1、IP地址定义 2、IP的两种协…

Web前端初级考证:探索与征服数字世界的初始之旅

Web前端初级考证&#xff1a;探索与征服数字世界的初始之旅 在数字浪潮席卷而来的今天&#xff0c;Web前端技术成为了连接现实与虚拟的桥梁。对于初学者而言&#xff0c;通过Web前端初级考证&#xff0c;不仅是对自身技能的检验&#xff0c;更是迈向更高层次的关键一步。本文将…

【NetTopologySuite类库】C#生成带约束(线、面)的Delaunay三角网

介绍 API地址&#xff1a;https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Triangulate.ConformingDelaunayTriangulationBuilder.html#NetTopologySuite_Triangulate_ConformingDelaunayTriangulationBuilder_Constraints 约束为线 效果图 红色…

经典文献阅读之--P2O-Calib(利用点对空间遮挡关系的相机-激光雷达标定)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…