.Net Core2.2 使用 AutoMapper进行实体转换
一、遇到的问题
在. Core Api 的编写中,我们经常会对一些功能点进行新增编辑操作,同时我们有时也会进行查询,但是我们查询的表的数据与我们返回的数据相差甚大,这是我们有需要自己手动进行类型的转换,去输出我们需要的类型。在添加和修改的时候我们也是需要传入A类型然后转换成我们需要的B类型去进行数据库的添加。其中我们就会写许多的简单重复代码,但是又不能不写。那么我们如何去避免这种情况呢?下面介绍的AutoMapper进行对象映射,可以很方便快捷的帮助我们解决这个问题。
二、AutoMapper介绍及安装配置
本次案例使用的是.Net Core 2.2和AutoMapper(8.0.0)以及AutoMapper.Extensions.Microsoft.DependencyInjection(6.0.0)。在我们安装Nuget包之后我们需要创建一个配置类来继承AutoMapper的Profile类,这里我们暂且命名是MapperConfig,同时我们还需要在Startup.cs中注入AutoMapper和刚刚我们创建MapperConfig文件。
我们在使用Mapper的时候我们可以选择使用依赖注入到控制器中使用,也可以直接using引用使用
到这里我们基础的配置就算好了,那我们一起看下我们怎么去使用AutoMapper进行实体映射转换吧。
三、详细使用介绍
- 1. 一对一的对应字段实体转换
我们看到上面就是我们需要转换的实体类和Dto了,对于简单这种转换我们,我们需要在Mapper配置文件中创建一个对应转换关系,然后一行代码进行转换。
- 2. 一对一不对应字段转换
上面我们转换对象都是一对一的转换,都有对应的转换关系。那么我们在实体和Dto中有不对应的关系时我们该如何转换呢?
就如这样,我们将实体类User转换UserAppointModel类,我们该如何转换呢?如果我们通过第一种转换方式的话,我们会发现Time这个字段是空的,这里我们就需要加额外的配置了,保证User的CreateTime字段可以转换成UserAppointModel的Time字段。
这里我们使用的是ForMember(),它是对单个成员进行自定义配置的一个方法,也就是说如果还有其他的不对应字段我们依然可以在后面进行自定义配置,使其对应转换。
- 3. 多表对应一个Dto进行转换
我们除了遇到一对一简单转换和特殊字段转换外,我们有时还会遇到多对一的实体转换,例如我们有些时候在Api返回的时候需要对主表和副表的数据进行整合返回成一个实体。这种情况我们怎么返回呢?现在我们看下面的这个案例:
我们需要把User实体和UserInfo实体转换成UserInfoModel进行输出。逻辑还是这个逻辑,我们需要先转换一个实体,然后在前一个实体的基础上进行另外一个实体转换。那么能不能连续Map两次呢?想法是这个想法,可惜在AutoMapper原有基础上不支持这种写法,不过我们可以重写其方法达到这种效果。
这里我们可以先创建一个非泛型静态类MapperTest,然后我们在里面写下以下方法:
这就是我们重写方法了,这样也就可以实现我们上面的想法了。在第一次转换的基础上进行第二转换,也就实现了多对一的转换了。
- 4. 集合对应转换
我们如何进行集合对集合的转换呢?集合与集合之间的转换呢与之前的一对一转换类似,只是我们转换的时候传的类型不是实体,而是List<>集合而已。下面看下User集合转换成UserModel集合的案例:
四、写在后面
在平常的代码中,我们经常会写一些重复的简单代码,如创建,修改输出实体转换。都是new实体一个一个转换去写,偶尔写那么一两个也还行,写的多了就有点浪费时间和精力了。本文介绍的是在.Net Core2.2中使用AutoMapper进行实体映射转换的,下一篇将介绍.Net Core3.0 AutoMapper9.0的使用与.Net Core2.2中的差别。
用爱生活,你会使自己幸福!用爱工作,你会使很多人幸福!
.Net Core2.2 使用 AutoMapper进行实体转换的更多相关文章
- Asp.NetCore 3.1 使用AutoMapper自动映射转换实体 DTO,Data2ViewModel
1:什么是AutoMapper? 下面为AutoMapper官方的解释: AutoMapper是一个对象-对象映射器.对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作. 使Aut ...
- 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...
- ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...
- DataTable转List<Model>通用类【实体转换辅助类】
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- HBaseConvetorUtil 实体转换工具
HBaseConvetorUtil 实体转换工具类 public class HBaseConvetorUtil { /** * @Title: convetor * @De ...
- Datatable转实体 实体转换辅助类
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...
- html实体转换
摘要: 在 HTML 中,某些字符是预留的.在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签.如果希望正确地显示预留字符,我们必须在 HTML 源代码中 ...
- C# 获取config文件 实体转换
随着项目的扩展,单独的key,value配置文件已经不能满足需求了 这里需要自定义配置节点,例如 <!--自定义 具体实体类配置问节点信息--> <School Name=" ...
- C# 实体集合和实体转换成相应的string、XDocument、XElement、XDocument
https://msdn.microsoft.com/zh-cn/library/system.xml.linq.xelement(v=vs.110).aspx XElement.Parse 方法 ( ...
随机推荐
- VM安装Linux Centos7.0虚拟机
一.准备工作 1.安装VMware 官网https://www.vmware.com/cn.html 2.准备centos7的镜像文件 官网下载链接:http://isoredirect.centos ...
- pip安装psycopg2失败解决
pip install psycopg2==2.8.4报错ERROR: Command "python setup.py egg_info" failed with error c ...
- 网络编程模型(C/S模型和B/S模型)
目录 网络应用编程模型 互联网与企业内部网 早期计算机网络的通信模型 C/S模式 B/S模式 B/S 和 C/S 的区别 网络应用编程模型 互联网与企业内部网 网络的两个含义: 互联网 :互联网(In ...
- D3.js实现拓扑图
最近写项目需要画出应用程序调用链的网路拓扑图,完全自己写需要花费些时间,那么首先想到的是echarts,但echarts的自定义写法写起来非常麻烦,而且它的文档都是基于配置说明的,对于自定义开发不太方 ...
- 一文快速入门Shell脚本_了解Sheel脚本基本命令
通过代码和注释的形式,列举了shell的基础操作,快速入门.shell在线编辑器 注释 单行用#号:多行::<<' 多行注释... '.:<<a 多行注释... a.:< ...
- Java中文件上传路径与路径修改相关问题(tomcat8.0+eclipse)
1.普通文件上传的路径: 通过getRealPath获取相关路径 String photoFolder =request.getServletContext().getRealPath("u ...
- CVE-2020-1947 Sharding-UI的反序列化复现及分析
CVE-2020-1947 复现及分析 0x01 影响 Apache ShardingSphere < =4.0.0 0x02 环境搭建 incubator-shardingsphere 的ui ...
- ubuntu 安装flask+nginx+gunicorn 待定
第一步 先检查服务器环境 pip python3 mysql redis 能下就下,该升级就升级 第二步 如果你的flask程序在github上 请使用git clone 地址 下载下来(如果是私 ...
- Keil MDK版兼容51系列单片机开发环境安装
一.安装源文件下载 百度网盘链接:https://pan.baidu.com/s/18tnjFgVat4q2hDSh7LAD8A 提取码: 2295 二.安装及破解 1.安装51的编辑器 双击安 ...
- Vue2.0 【第二季】第2节 Vue.extend构造器的延伸
目录 Vue2.0 [第二季]第2节 Vue.extend构造器的延伸 一.什么是Vue.extend 二.自定义无参数标签 三.挂载到普通标签上 Vue2.0 [第二季]第2节 Vue.extend ...