• AutoMapper


    AutoMapper自动映射规范
    两个类之间自动映射时,这两个类的属性名称和类型必须相同
    public class Student()
    {
        public long StudentId{get;set;}
        public string StudentName{get;set;}
    }
    public class StudentDto()
    {
        public long StudentId{get;set;}
        public string StudentName{get;set;}
    }

    如果一个类中存在包含关系,另一个类要自动映射两个类时,映射类属性命名要在被包含类属性名的基础上加上被包含类的类名

    public class Student()
    {
        public long StudentId{get;set;}
        public string StudentName{get;set;}
        public Class class{get;set;} 
    }
    public class Class()
    {
        public long Id{get;set;}
        public string Name{get;set;}
    }
    public class StudentDto()
    {
        public long StudentId{get;set;}
        public string StudentName{get;set;}
        public long ClassId{get;set;}
        public string ClassName{get;set;}
    }

    注册一个映射关系

    Mapper.Initialize(d=>d.CreateMap<源类型,目标类型>());
     
    反向映射
    创建之后更改目标类型,会反过来映射到源类型
    ReverseMap方法
    Mapper.Initalize(d=>d.CreateMap<源类型,目标类型>().ReverseMap());
    var dto = Mapper.Map<StudentDto>(models);
    dto.StudentName = "张三";//把目标类型值改变
    Mapper.Map(dto,models);//反向映射
    配置验证
    automapper默认是检查所有属性是否可以映射
    AssertConfigurationlsValid方法用来验证是否可以全部映射,如果不能则会报错
    Mapper.Configuration.AssertConfigurationlsValid();

    当我们的属性不能全部映射,但又不想报错时,可以使用Ignore方法来忽略掉 无法映射 or 不需要映射 的属性

    Mapper.Initalize(d=>d.CreateMap<源类型,目标类型>().forMember(d=>d.Name,s=>s.Ignore())); //忽略Name属性

    我们也可以在createmap时指定要验证的成员列表

    Mapper.Initalize(d=>d.CreateMap<源类型,目标类型>(MemberList.StudentDTO));//只验证StudentDTO类的属性
    //如果两个类都不需要检查,加上MemberList.None即可

    automapper配置了两个类型的映射后,这两个类型的集合或数组都可以直接映射,无需再次配置

    Mapper.Initalize(d=>d.CreateMap<源类型,目标类型>()); 
    var dto = Mapper.Map<List<目标类型>>(List<源类型>);

    automapper还可以映射子类,但是需要配置

    Mapper.Initalize(d=>{
        d.CreateMap<源类型,目标类型>().Include<源子类型,目标子类型>();
        d.CreateMap<源子类型,目标子类型>();
    });
    
    源类型 model = new []{
        new 源类型();
        new 源子类型();
    }
    目标类型 DTO = Mapper.Map<目标类型[]>(model);
    //源类型会被映射为目标类型
    //源子类型会被映射为目标子类型

    第一行是配置子类和父类的关系,第二行是配置子类之间的映射

  • 相关阅读:
    U132973 双生独白
    Remmarguts' Date(A* 短路)
    P3908 数列之异或
    P1469 找筷子
    P1759 通天之潜水
    P2356 弹珠游戏
    P7072 直播获奖
    P7074 方格取数
    CSP2020二轮游记
    P6205 [USACO06JAN]Dollar Dayz S
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/8886321.html
Copyright © 2020-2023  润新知