.net core AutoMapper的简单使用。

news2024/11/17 22:27:21

AutoMapper主要处理对象与对象之间的映射,减少程序员自己编写代码的工作量,提高开发效率。

应用场景:
假如你想对原始数据,进行部分字段展示,那么你需要创建一个对应的DTO类,进行手动映射,这样太麻烦。所以可以采用自动映射。

一、AutoMapper的安装使用

1.nuget下载如同所示的工具包。AutoMapper.Extensions.Microsoft.DependencyInjection
在这里插入图片描述
2.注入服务依赖。

 //注入自动映射服务   //AppDomain.CurrentDomain.GetAssemblies()获取项目程序集
            //扫秒profile文件  
            //需要nuget  AutoMapper 具体名称看依赖包
            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

AddAutoMapper会自动扫描项目中的profiles文件夹,通过profile进行自动映射。
3.在项目中创建profiles文件夹。
在这里插入图片描述
4.创建profile类。

    public class TouristRouteProfile:Profile
    {
        //映射配置就是在构造函数完成的
        //AutoMapper 在注入完成后 会自动扫秒Profile 然后通过构造函数完成映射
        public TouristRouteProfile() 
        {
            //CreateMap:
            //第一个参数是模型对象 第二个参数是映射的目标对象
            //俩个对象中相同的字段会自动映射
            ForMember:
            ///第一个参数是 目标对象dto
            ///第二个参数是原始数据模型   进行修改和 赋值给对应的字段
            ///将数据库里的数据通过Molde映射到Dto中 然后展示在界面
            CreateMap<TouristRoute, TouristeRouteDto>().ForMember(
             dest => dest.Price,
             opt => opt.MapFrom(src => src.Originalprice * (decimal)(src.DiscountPresent ?? 1))
             ).ForMember(
                dest => dest.travelDays,
                opt => opt.MapFrom(src => src.travelDays.ToString())
                ).ForMember(
                dest => dest.TripType,
                opt => opt.MapFrom(src => src.TripType.ToString())
                ).ForMember(
                dest => dest.DepartureCity,
                opt => opt.MapFrom(src => src.DepartureCity.ToString())
                );



            ///上面修改的数据  等同于
            /// Price=touristeRouteFromRepo.Originalprice*(decimal)(touristeRouteFromRepo.DiscountPresent ?? 1),//变量定义中含有两个问号,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。   DiscountPresent是折扣
            ///  travelDays = touristeRouteFromRepo.travelDays.ToString(),
            /// TripType = touristeRouteFromRepo.TripType.ToString(),
            ///   DepartureCity = touristeRouteFromRepo.DepartureCity.ToString()
            ///   省去了相同字段手动赋值的麻烦
            ///   相同字段和不想修改的数据  可以自动映射

            //将前端接收到的创建数据通过Dto映射到Molde中
            CreateMap<TouristRouteForCreationDto, TouristRoute>().ForMember(
                dest => dest.Id,
                opt => opt.MapFrom(src => Guid.NewGuid())
                );

            CreateMap<TouristRouteForUpdateDto, TouristRoute>();

            CreateMap<TouristRoute, TouristRouteForUpdateDto>();

        }
    }

注意该类,一定要继承Profile类其中CreateMap方法主要就是做关系映射,ForMember是自定义映射的数据格式和类容。MapFrom就是将元数据中的类容做一下转换,给到dest对应的Dto对象。

5.使用。
映射关系做完后,我们可以在控制器中使用了。

     //数据仓库接口
        private ITouristRouteRepository _touristRouteRepository;
        private readonly IMapper _mapper;

        //依赖注入  构造函数注入
        //注入的时候已经实现了ITouristRouteRepository     因为参数类型已经注册到了ioc容器,所以他所对面的实现类会直接返回实例
        public TouristRoutesController(ITouristRouteRepository touristRouteRepository,IMapper mapper) {
            _touristRouteRepository = touristRouteRepository;
            _mapper = mapper;
        }
        
方法() {    ///Map泛型是映射的结果   参数是原始数据
            var touristRouteDto = _mapper.Map<TouristeRouteDto>(touristeRouteFromRepo);

            return Ok(touristRouteDto);}

这样就完成了一个简单的映射关系。

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

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

相关文章

在电网上使用的储能系统模拟(simulink)

目录 1 概述 2 配电系统 3 动态负载模型 4 光伏电场和TMY3数据 5 储能系统 (ESS) 6 案例 7 仿真结果 8 Simulink&Matlab代码实现 1 概述 (1)目标展示了SimPowerSystems在不到一分钟的模拟时间内&#xff0c;以相量模式模拟电路和控制系统的能力。 (2)说明与能量存储…

对话顶立欧雅纳特丨传统制造企业的“人货场”重构该从何入手?

链条长、客单价高、标准化程度低、交付周期长......作为传统制造行业中颇具代表性的领域&#xff0c;家居建材一直被视为“距离互联网最远”行业之一&#xff0c;平均仅有10%的数字化率&#xff0c;行业整体的数字化转型相对滞后。随着外部环境的变动与行业生态的发展&#xff…

RK3588平台开发系列讲解(AUDIO篇)Android音频调试--tiny-alsa 工具

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、工具介绍二、工具的使用2.1 tinyplay2.1 tinycap2.3 tinymix2.4 tinypcminfo沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Android下audio调试工具tiny-alsa的使用方法。 一、工具介绍 RK平台…

FFT学习笔记(快速傅里叶变换)

用途 快速傅里叶变换&#xff08;Fast Fourier Transformation&#xff0c;简称FFT&#xff09; 一般用来加速多项式乘法。求两个nnn次多项式相乘&#xff0c;朴素算法需要O(n2)O(n^2)O(n2)&#xff0c;但FFT只需要O(nlog⁡n)O(n\log n)O(nlogn)就能解决。 多项式 系数表示法…

基于java的扫雷游戏的设计-计算机毕业设计

项目介绍 扫雷游戏的基本功能&#xff1a;点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,玩家需要尽快找出雷区中的所有不是地雷的方块&#xff0c;而不许踩到地雷…

jsp+ssh+mysql实现的Java web学生考勤管理系统源码附带视频指导运行教程

今天给大家演示的是一款由jspsshmysql实现的Java web学生考勤管理系统&#xff0c;其中struts版本是struts2。本系统实现了管理员、学生、教师三个角色的功能&#xff0c;其中管理员可以管理基本信息&#xff0c;如班级信息、课程信息、用户信息、课程表等。教师可以管理自己班…

mongodb实现请求日志存储

引言 最近学习了mongodb&#xff0c;想实际应用到项目中&#xff0c;就先简单实现了一个存储请求日志的功能&#xff1b; 为什么使用mongodb存储日志&#xff0c;主要是因为日志数据量大、低价值、写入频繁&#xff0c;并且对事务要求不高&#xff0c;使用传统的关系型数据库…

Java强软弱虚引用和ThreadLocal工作原理(二)

1. 前言 读本篇文章之前&#xff0c;请移步到上一篇文章Java强软弱虚引用和ThreadLocal工作原理&#xff08;一&#xff09;_broadview_java的博客-CSDN博客 我们继续来讲一下java的强软弱引用在Android开发中的使用&#xff0c;并深入理解一下ThreadLocal的原理 2. 强软弱引…

Pro3:js实现放大镜效果

在我们平时见到很多购物网站都会有放大镜效果的出现&#xff0c;当我们将鼠标放在一个商品图片的上面&#xff0c;就会在旁边出现对应的放大效果。 实现步骤 实现原理是非常简单的&#xff0c;实际上是两张图片&#xff0c;一张原图和一张更大尺寸的图片。一开始通过css样式…

MessageFormat的具体使用(格式化消息)

文章目录1. 前言2. 先说结论3. 在结论上补充其他更加特殊情况1. 数字类型可以使用#字符来确认精度2. 数组类型转化需要注意3. 输出特殊字符4. 如何判断一个String是否有替换位4. 粗略原理1. 前言 在工作中发现接口的返回报文&#xff0c;大部分公司通常都会封装一层&#xff0c…

2022-LCLR-DIFFDOCK: DIFFUSION STEPS, TWISTS, AND TURNS FOR MOLECULAR DOCKING

2022-LCLR-DIFFDOCK: DIFFUSION STEPS, TWISTS, AND TURNS FOR MOLECULAR DOCKING Paper: https://arxiv.org/abs/2210.01776 Code: https://github.com/gcorso/DiffDock 预测小分子配体与蛋白质的结合结构(称为分子对接)是药物设计的关键。最近的深度学习方法将对接视为一个回…

GB/T 20984-2022《信息安全技术 信息安全风险评估方法》解读

前言 近年来&#xff0c;信息安全风险评估工作逐步在国家基础信息网络及重要行业信息系统中普遍推行&#xff0c;信息安全风险评估是信息安全保障工作的基础和重要环节&#xff0c;日前&#xff0c; GB/T 20984-2022 《信息安全技术 信息安全风险评估方法》发布&#xff0c;将…

oracle学习篇(四)

oracle学习篇(四&#xff09; 1 PL/SQL异常处理 1.1 预定义异常 1.1.1 内容 oracle里面已经存在的异常 如果是自定义异常,一般写的编号是20000-20999之间1.1.2 处理异常语法 exceptionwhen 异常类型1 then输出异常类型信息1;when 异常信息2 then输出异常类型信息2;--以上都…

MR案例:学生排序(单字段排序、多字段排序)

文章目录一、提出任务二、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录&#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建学生实体类5、创建学生映射器类5、创建学生归并器类6…

JS中操作<select>标签选的值

JS中操作<select>标签选的值 <select>标签是一种表单控件&#xff0c;用来创建下拉列表。在<select> 标签内可用 <option> 标签定义下拉列表中的可用选项。下面给出一个基本下拉列表示例&#xff1a; <!DOCTYPE html> <html lang"zh&q…

Codeforces Round #838 (Div. 2)

A. Divide and Conquer 题目链接&#xff1a;Problem - A - Codeforces 样例输入&#xff1a; 4 4 1 1 1 1 2 7 4 3 1 2 4 1 15样例输出&#xff1a; 0 2 1 4题意&#xff1a;一个数组是好的当且仅当所有的元素和是一个偶数&#xff0c;现在给我们一个初始数组&#xff0c;我…

Android---组件化

1、单体应用 所有代码写在一个工程里。不同业务写到各自模块&#xff0c;以包名来区分。 弊端 1、无论包名做的再好&#xff0c;随着项目扩大&#xff0c;项目失去层次感&#xff0c;接受吃力。 2、报名作为约束&#xff0c;太弱了。一不注意就会出现不同业务之间之间相互调…

【算法数据结构专题】「限流算法专项」带你认识常用的限流算法的技术指南(分析篇)

限流 限流的目的是通过对并发访问/请求进行限速&#xff0c;或者对一个时间窗口内的请求进行限速来保护系统&#xff0c;一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理 限流一词常用于计算机网络之中&#xff0c;定义如下&#xff1a; In computer networks, rate l…

接口测试(七)—— 参数化、数据库操作类封、接口自动化框架

目录 一、接口自动化测试框架 1、目录结构 二、封装iHRM登录 1、普通方式实现 2、登录接口对象层 3、登录接口测试用例层 4、封装断言方法 三、参数化 1、回顾UnitTest参数化 1.1 原始案例 1.2 参数化实现 1.3 从json文件读取 2、登录接口参数化 2.1 组织数据文…

java8流操作之不常用但是很好用的隐藏api

前言 1、一些普通的方式就不再多说了&#xff0c;这里主要说一些不常用的&#xff0c;但是作用很大的api方式 2、如果想要细致了解可以参考 JAVA8的流操作&#xff0c;十分推荐 一、flatMap 1、这个api主要是用来推平流的&#xff0c;和map不一致&#xff0c;map是对象到对…