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进行对象映射的更多相关文章

  1. ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射

    本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...

  2. .NET CORE 中使用AutoMapper进行对象映射

    简介 AutoMapper uses a fluent configuration API to define an object-object mapping strategy. AutoMappe ...

  3. ASP.NET.Core中使用AutoMapper

      首先需要在NuGet中引用AutoMapper的类库 install-package AutoMapper install-package AutoMapper.Extensions.Micros ...

  4. 在 ASP.NET Core 中使用 AutoMapper 使 Entity 和 Resource 之间进行映射

    目录 从 NuGet 安装 AutoMapper 添加 Entity类 和 Resource类 添加一个 Profile文件,配置映射关系 在Startup中对AutoMapper进行注册 在项目中使 ...

  5. ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

    原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...

  6. 如何在ASP.NET Core中使用JSON Patch

    原文: JSON Patch With ASP.NET Core 作者:.NET Core Tutorials 译文:如何在ASP.NET Core中使用JSON Patch 地址:https://w ...

  7. 如何在ASP.NET Core中编写高效的控制器

    ​通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...

  8. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  9. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

随机推荐

  1. 机器取代人类成为现实,Linux shell才可被取代?

    机器取代人类成为现实,Linux shell才可被取代? 新睿云 新睿云 新睿云-让云服务触手可及 本次笔者用通俗易懂的语言介绍一下Linux shell,由于笔者能力有限,如有有描述不准确的地方还请 ...

  2. 03-C#笔记-数据类型

    --- # 1 数据类型 --- ## 1 和C++不同的数据类型: byte: 8位,0~255 decimal:范围大于double,128位 sbyte: 8位,-128~127 uint 32 ...

  3. 将python项目.py文件打包成.exe文件

    安装pyinstaller包 pip3 install pyinstaller 如果不行 pip3 install pyinstaller -i https://pypi.doubanio.com/s ...

  4. L1和L2正则化(转载)

    [深度学习]L1正则化和L2正则化 在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况 ...

  5. 【BigData】Java基础_HashMap

    HashMap简介 HashMap是一种非常常见.方便和有用的集合,是一种键值对(K-V)形式的存储结构 常见的方法如下: put:将数据添加到集合中 get:获取集合中的元素 size:获取集合的长 ...

  6. Spring Boot 《一》开发一个“HelloWorld”的 web 应用

    一,Spring Boot 介绍 Spring Boot不是一个新的框架,默认配置了多种框架使用方式,使用SpringBoot很容易创建一个独立运行(运行jar,内嵌Servlet).准生产级别的基于 ...

  7. mongodb连接认证失败

          版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_29143909/arti ...

  8. 【Activiti学习之五】BPMN事件

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.事件定义1.定时器事件(1)timeDate:指定时间触发<timerEven ...

  9. 依赖注入之unity(winform方式)

    依赖注入之unity(winform方式) 要讲unity就必须先了解DI和IOC及DIP,如下链接提供DI和IOC的基础:https://www.cnblogs.com/zlp520/p/12015 ...

  10. UML类图知识