autoMapper 基于约定的对象映射器

目录

  1. 安装包
  2. 添加服务
  3. 书写映射关系

安装包

  需要安装两个包:AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection第二个是第一个的扩展包

添加服务

  在 ConfigureServices 方法中添加:services.AddAutoMapper(typeof(mapperSet));需要注意的是 mapperSet 类为存放映射规则类。

书写映射关系

  一切准备工作都非常简单,接下来就需要根据个人的需要定义不同的映射规则。

public class mapperSet : Profile
{
public mapperSet()
{ }
}

注意点:1 继承于 Profile 类。 2 在构造函数中书写规则

源类与目标类

源类:

public class Person
{
public int Id { get; set; }
public string Name { get; set;}
public string Email { get; set }
public int Age { get; set; }
}

目标类:

public class personDto
{
public int Id { get; set; }
public string Name { get; set;}
public string Email { get; set }
public int Age { get; set; }
}

简单映射

  简单映射:源类的属性名与目标类的属性名一致,只是做简单的赋值,现在我们准备的两个类就具备简单映射的条件

public mapperSet()
{
CreateMap<Person, personDto>();
}

注意:在构造函数中定义规则。

实验代码与结果:

Person person = new Per() {
Id = 1,
Name = "zz",
Age = 18,
Email"1234567@qq.com"
};
personDto dto = npersonDto(
mapper.Map<PersopersonDto>(person,dto);



这个很简单,不过记得把 mapper 注入进来,类型为IMapper mapper

数组映射

  当我们需要对数组或者列表进行映射的时候,我们只需添加类的映射关系即可,比如我们要对上面的两个类进行映射,那么我们现在不需要添加新的关系。

List<Person> people =
new List<Person>() {
new Person() {
Id = 1,
Name = "zz",
Age = 18,
Email = "123456@qq.com"
},
new Person() {
Id = 2,
Name = "wbz",
Age = 19,
Email = "456789@qq.com"
}
};
List<personDto> dtos = newList<personDto>();
mapper.Map<List<Person>,List<personDto>>(peopledtos);

条件映射与映射到指定属性

  在某些情况下我们需要根据某些条件来判断某个属性是否符合规则。比如当年龄小于 0 的时候我们不赋值。另外当源类型的属性名与目标类型的属性名不一致的时候我们需要指定映射属性。我们将 personDto 的 Age 改为 dtoAge。

CreateMap<Person, personDto>().ForMember(dest => dest.dtoAge,
opt => {
//指定映射关系
opt.MapFrom(src => src.Age);
//判断是否符合条件
opt.Condition(src => src.Age >= 0);
});



  这里因为 Age 小于 0 所以没有赋值(int 默认值为 0,所以 dtoAge 为 0)

其他

autoMapper 自带展平功能(源类中没有和目标类匹配的属性名时,自动匹配源类的包含类)。

数组空替换,一般用于数组列表转换,当数组为 null 时自动映射为[],启用方法:在映射规则中添加AllowNullCollections = true;

属性空替换,当属性为空时替换为指定值,这个我忘记怎么用了。。一般为空关键属性都过不了 FluentValidation,有兴趣的可以自己去看看。

泛型映射,不太常用,基本上大同小异,有需要的可以去看一下文档。

总结

  比较好用的东西,当然还有很多功能时很强大的。

.net core启用 autoMapper的更多相关文章

  1. Asp.Net WebApi+Microsoft.AspNet.WebApi.Core 启用CORS跨域访问

    WebApi中启用CORS跨域访问 1.安装 Nugget包Microsoft.AspNet.WebApi.Cors This package contains the components to e ...

  2. .Net Core使用AutoMapper做对象关系映射

    我想很多后端开发者,纠结于如何在Dto及表实体中做属性关系映射,因为真的太繁琐了., ⒈如何使用? Mapper.Initialize(cfg => cfg.CreateMap<Users ...

  3. ASP.NET Core 启用跨域请求

    本文翻译整理自:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1 一 .Cross-Orig ...

  4. ASP.NET Core教程:ASP.NET Core使用AutoMapper

    一.前言 在实际的项目开发过程中,我们使用各种ORM框架可以使我们快捷的获取到数据,并且可以将获取到的数据绑定到对应的List<T>中,然后页面或者接口直接显示List<T>中 ...

  5. .net core中automapper的使用

    automapper 是将两个类中的相同字段进行映射,也可以指定字段进行映射:将 UserDao的id 映射为 User 的age CreateMap<UserDao, User>() . ...

  6. .net core使用AutoMapper

    AutoMapper文档:http://docs.automapper.org/en/stable/The-MyGet-build.html 新的版本抛弃了静态API方法,我们将使用依赖注入来完成. ...

  7. 为.net mvc core 启用 https

    引用nuget包:Microsoft.AspNetCore.Server.Kestrel.Https这是一个服务器测试ssl密钥,密码如代码里面所示 using System; using Syste ...

  8. .net Core 使用AutoMapper

    在我们的项目中慢慢的要把数据库的实体模型和视图模型进行分离,防止被人拿到我们表字段.在学校的时候自己只是有将很多数据库模型,写成一个视图模型返回到前台. 首先我们把这两个包引入项目中去. 然后我们创建 ...

  9. .net core启用Swagger

    启用 Swagger 页面    官方文档推荐两种框架:Swashbuckle 和 NSwag,这里使用 Swashbuckle 来生成接口文档. 目录 安装包 添加服务 配置中间件 添加 UI 设置 ...

随机推荐

  1. sql server 安装出现需要sqlncli.msi文件,错误为 microsoft sql server 2012 native client

    在安装sql server 2017 时出现 弹框标题为  microsoft sql server 2012 native client  内容为需要sqlncli.msi文件 去本地目录找本身的那 ...

  2. [TCP/IP] 三次握手过程中有哪些不安全性

    1)SYN flood 泛洪攻击 , 伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送.当大量的攻击 ...

  3. Git学习笔记1-Git基础

    1.创建版本库 $ mkdir /d/learngit #创建空目录 $ cd learngit #进入目录 $ git init #将该目录初始化成Git仓库 2.配置信息 1)配置用户信息: $ ...

  4. Highways POJ - 1751

    题目链接:https://vjudge.net/problem/POJ-1751 思路: 最小生成树板子,只需要多记录每个dis[x]的权值是从哪个点到x这个点的. #include <stdi ...

  5. Eyoo大学生交友平台

    团队简介 团队名称 golden express 队员学号列表 王伟 201731062214 刘冬 201731062227 张旭 201731062129 秦裕航 201731062432 (组长 ...

  6. 开放接口的安全验证方案(AES+RSA)

    http://wubaoguo.com/2015/08/21/%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%AA ...

  7. XLA

    原 TensorFlow技术内幕(七):模型优化之XLA(上) 2018年06月13日 14:53:49 jony0917 阅读数 5513   版权声明:本文为博主原创文章,遵循CC 4.0 by- ...

  8. Python进阶-Ⅷ 匿名函数 lambda

    1.匿名函数的引入 为了解决那些功能很简单的需求而设计的一句话函数 def func(i): return 2*i # 简化之后 func = lambda i:2*i #todo 其中:func是函 ...

  9. 快速调用Android虚拟机

    由于使用Android studio开发flutter 每次打开软件都需要很长时间,所以我自己使用vscode进行开发,没有虚拟机也开发不了,于是就有了这篇博客的作用啦 在本地桌面新建一个xxx.ba ...

  10. python中多线程相关

    基础知识 进程:进程就是一个程序在一个数据集上的一次动态执行过程 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程的实体 ...