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. emoji表情多终端适配解决方案

    emoji表情多终端适配解决方案 emoji,也叫 颜表情 是日本在无线通信中所使用的视觉情感符号,由栗田穰崇(Shigetaka Kurita)创作,并在日本网络及手机用户中流行.自苹果公司发布的i ...

  2. JS高阶---原型面试

    测试1: 分析如下 结果如下: 测试2: 测试3: 测试4: .

  3. 几个python编程例子

    作业 有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中,结果为{'k1': ...

  4. 网络服务—NFS

    什么是NFS ? NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作 ...

  5. web-程序逻辑问题

    题目 查看源码 http://ctf5.shiyanbar.com/web/5/index.txt 代码如下 <html> <head> welcome to simplexu ...

  6. Spring Boot 配置文件application.properties

    #########COMMON SPRING BOOT PROPERTIES ######========CORE PROPERTIES=========== #SPRING CONFIG (Conf ...

  7. day44_9_3前端(1)

    一.http协议. 1.在软件开发架构中 有两种模式:1.b/s.2.c/s. 其中b/s就是以浏览器作为客户端,所以,需要服务器同一遵循同一规则,向浏览器发送数据,这个规则就是http协议,存在以应 ...

  8. 生鲜超市项目错误及解决办法(crispy_forms、外键指向自己、class嵌套访问父类、meta类及各种字段参数)

    为什么要在INSTALLED_APPS中加入crispy_forms? 因为django-crispy-forms 是对django form在html页面呈现方式进行管理的一个第三方插件. 为什么有 ...

  9. LG1410 子序列 二分图判定

    问题描述 LG1410 题解 如果\(i<j,a_j \le a_i\),那么他它们不能在一个上升序列中. 于是在\(i,j\)之间建边,看建出来的图是不是二分图即可. \(\mathrm{Co ...

  10. 数据结构——顺序栈(sequence stack)

    /* sequenceStack.c */ /* 栈 先进后出(First In Last Out,FILO)*/ #include <stdio.h> #include <stdl ...