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. secruity

    security3.x <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns=& ...

  2. 【Java】理解ClassNotFoundException与NoClassDefFoundError的区别

    一.概念上的认识 1)Exception与Error的区别 1.Exception的出现不会导致程序结束,用户程序可以捕获该异常 2.Error的出现会导致程序结束,用户程序无法捕获Error错误 2 ...

  3. Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip

    目录 Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip 场景 过程还原 结论 参考资料 Nginx+Docker部署模式下 asp.net core 获取真实的客户端 ...

  4. Setting up the data and the model

    Table of Contents: Setting up the data and the model Data Preprocessing Weight Initialization Batch ...

  5. vue-particles粒子动画插件的使用和爬坑出现垂直滚动条

    1下载==>cnpm install vue-particles --save-dev 2引入 注册-->main.js//插件 import VueParticles from 'vue ...

  6. C语言的暂停

    #include<stdio.h> int main(void) { printf("Hello, World!\n"); system("pause&quo ...

  7. Js中的对象、构造函数、原型、原型链及继承

    1.对象 在传统的面向过程的程序设计中,会造成函数或变量的冗余.而JS中对象的目的是将所有的具有相同属性或行为的代码整合到一起,形成一个集合,这样就会方便我们管理,例如: var person1={  ...

  8. Portainer

    docker search portainer docker pull portainer/portainer docker run -it \ --name prtainer \ -p 9000:9 ...

  9. 石欣钰-201871010117 《面向对象程序设计(java)》第六、七周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...

  10. day28 8_7 网络编程之tcp协议

    一.socket模块 socket模块就是用来网络搭建的模块,socket也叫套接字. 创建网络连接,需要使用两个模块进行模拟,一个作为server服务器端,一个作为client客户端. 在服务器端, ...