ASP.NET CORE 中使用AutoMapper进行对象映射
ASP.NET CORE 中使用AutoMapper进行对象映射
1、什么是AutoMapper?
AutoMapper是基于对象到对象约定的映射工具,常用于(但并不仅限制于)把复杂的对象模型转为DTO,一般用于ViewModel模式和跨服务范畴。
AutoMapper给用户提供了便捷的配置API,就像使用约定来完成自动映射那样。
AutoMapper包含以下功能:平展、投影、配置验证、列表和数组、嵌套映射、自定义类型转换程序、自定义值转换程序 、自定义值格式程序 、Null值替换
AutoMapper是一款单向映射器。这意味着它并没有内建映射对象支持来回写至原始源,除非用户在更新映射对象之后明确地创建逆向反射。这需要 通过设计完成,因为让DTO回写到,比方说:域模型或其他东西,就会更改它的持久性,同时人们也认为它是反模式的。在这种解决方案中,命令消息在双向映射 中往往是更好的选择。然而,在某些特定环境中,有人可能会为双向映射辩解,比如:非常简单的CRUD应用程序。一个支持双向映射的框架就是Glue。
2、在ASP.NET CORE中使用AutoMapper
①在程序包管理控制台中执行命令安装依赖包:
PM> Install-Package AutoMapper -Version 8.1.
PM> Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 6.1.
②使用依赖关系注入从应用中引用的服务
在Startup类的ConfigureServices()方法中调用AddAutoMapper()服务:
1 public void ConfigureServices(IServiceCollection services)
2 {
3 services.AddAutoMapper();
4 }
③创建AutoMapper映射规则
添加AutoMapperConfigs类,继承Profile类
1 using AutoMapper;
using CodeFirst.Models;
using DAL; namespace CodeFirst.Common
{
public class AutoMapperConfigs : Profile
{
//添加实体映射关系
public AutoMapperConfigs()
{
CreateMap<MainModel, MainInfoResult>(); //MainModel转MainInfoResult
CreateMap<MainInfoResult, MainModel>(); //MainInfoResult转MainModel
}
}
}
④在构造函数中注入IMapper
public class LoginController : Controller
{
private IMapper _mapper; public LoginController(IMapper mapper)
{
_mapper = mapper;
}
}
⑤使用AutoMapper进行对象转换
单个对象转换
public ActionResult RegistSend(MainModel model)
{
var dto = _mapper.Map<MainInfoResult>(model);//MainModel 转MainInfoResult
var re = _userdal.RegistSend(dto);//传入的对象为MainInfoResult
return Json(new { status = re.Status, message = re.Message });
}
集合转换
public List<Student> GetStudentList()
{
//模拟数据
var StuList = new List<StuInfo>()
{
new StuInfo(){ Id=,Name="张三",Sex="男",Age= },
new StuInfo(){ Id=,Name="李四",Sex="男",Age= },
new StuInfo(){ Id=,Name="王五",Sex="男",Age= },
};
//对象集合转Dto集合.
var Students = _mapper.Map<List<Student>>(StuList);
return Students;
}
AutoMapper功能十分强大,支持属性名不同,NULL值替换等等,在此只介绍简单的常用方法,有关详情见AutoMapper官网地址:http://automapper.org/
ASP.NET CORE 中使用AutoMapper进行对象映射的更多相关文章
- ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...
- .NET CORE 中使用AutoMapper进行对象映射
简介 AutoMapper uses a fluent configuration API to define an object-object mapping strategy. AutoMappe ...
- ASP.NET.Core中使用AutoMapper
首先需要在NuGet中引用AutoMapper的类库 install-package AutoMapper install-package AutoMapper.Extensions.Micros ...
- 在 ASP.NET Core 中使用 AutoMapper 使 Entity 和 Resource 之间进行映射
目录 从 NuGet 安装 AutoMapper 添加 Entity类 和 Resource类 添加一个 Profile文件,配置映射关系 在Startup中对AutoMapper进行注册 在项目中使 ...
- ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试
原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...
- 如何在ASP.NET Core中使用JSON Patch
原文: JSON Patch With ASP.NET Core 作者:.NET Core Tutorials 译文:如何在ASP.NET Core中使用JSON Patch 地址:https://w ...
- 如何在ASP.NET Core中编写高效的控制器
通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
随机推荐
- 张兴盼-201871010131 《面向对象程序设计(java)》第六、七周学习总结
张兴盼-201871010131 <面向对象程序设计(java)>第六.七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...
- LoadRunner开发http协议接口之form表单脚本
loadrunner传form表单,用web_submit_data函数. Action() { // lr_start_transaction("hp_homepage"); / ...
- mysql 之编码配置、引擎介绍、字段操作、数据类型及约束条件
数据库的配置 # 通过配置文件统一配置的目的: 统一管理 服务端(mysqld) 客户端(client) 配置了mysqld(服务端)的编码为utf8, 那么再创建的数据库,默认编码都采用utf8. ...
- python递归和内置方法
递归:函数调用自身 核心:递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到):设置一个条件,能够让最后一次函数调用结束 练习: 第一个人的姓名是16岁,后面每个人的年龄都比前一个大 ...
- Comet OJ 夏季欢乐赛 分配学号
Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...
- python yield实现协程(生产者-消费者)
def customer(): r="" while True: n=yield r#,接收生产者的消息,并向消费者发送r print("customer receive ...
- Mybatis集成ehcache
Mybatis集成ehcache 1.为什么需要缓存 拉高程序的性能 2. 什么样的数据需要缓存 很少被修改或根本不改的数据 业务场景比如:耗时较高的统计分析sql.电话账单查询sql等 3. ehc ...
- 数据结构——单链表(singly linked list)
/* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...
- P3258 [JLOI2014]松鼠的新家题解
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有\(n\)个房间,并且有\(n-1\)根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树& ...
- 实验三:Linux进程管理(HDU)
2.设计内容 把下面的几个网址的内容看懂,关于Linux的通信机制就会有个基本的了解了,后面的这几个代码也应该可以看得懂了. 管道通信:https://blog.csdn.net/ljianhui/a ...