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. Modbus协议 CRC 校验码

    CRC(循环冗余校验)在线计算 http://www.ip33.com/crc.html 里面的8005的多项式值,但网上看到的算法都是用A001来异或的 ---------------------- ...

  2. 数字、字符串、列表、字典,jieba库,wordcloud词云

    一.基本数据类型 什么是数据类型 变量:描述世间万物的事物的属性状态 为了描述世间万物的状态,所以有了数据类型,对数据分类 为什么要对数据分类 针对不同的状态需要不同的数据类型标识 数据类型的分类 二 ...

  3. HTML与CSS学习笔记(2)

    1.CSS背景样式? background-color 背景色 background-image 背景图 url(背景地址) 默认:会水平垂直铺满背景图 background-repeat 平铺方式 ...

  4. 多线程(四)多线程同步_Critical Section临界区

    临界区是指一个小代码段,在代码能够执行前,它必须独占对某些共享资源的访问权.和使用mutex一样,它们都是以原子操作方式来对共享资源进行访问. 临界区又叫关键代码段,与上一篇的mutex互斥体实现的功 ...

  5. USACO Apple Delivery

    洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery 洛谷传送门 JDOJ 2717: USACO 2010 Dec Silver 1.Apple Delivery JDOJ ...

  6. tornado请求与响应

    tornado中处理请求与响应的类如下, 所有视图类必须继承该类: tornado.web.RequestHandler 一. 响应之self.write()方法 1.  该方法可返回值的类型: 当返 ...

  7. 【UVA1303】Wall(凸包)

    点此看题面 大致题意: 给你一个多边形,要求建一面墙使得墙上的点至少离多边形每个顶点\(R\)的距离,求最短的墙长. 考虑\(R=0\) 考虑当\(R=0\)时,所求的答案显然就是求得的凸包的周长. ...

  8. idea插件篇之java内存分析工具(JProfiler)

    前言在运行java的时候有时候想测试云运行时占用内存情况,这时候就需要使用测试工具查看了.在eclipse里面有 Eclipse Memory Analyzer tool(MAT)插件可以测试,而在i ...

  9. Java之数据库基础理论

    一.事务的四大特性 ACID 只有满足一致性,事务的执行结果才是正确的. 在无并发的情况下,事务串行执行,隔离性一定能够满足.此时要只要能满足原子性,就一定能满足一致性. 在并发的情况下,多个事务并发 ...

  10. ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便(转载)

    原文地址:https://www.cnblogs.com/Andre/p/9604759.html 初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通 ...