zoukankan      html  css  js  c++  java
  • 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);
    //源类型会被映射为目标类型
    //源子类型会被映射为目标子类型

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

  • 相关阅读:
    Head First设计模式之组合模式
    Html input 常见问题
    Head First设计模式之外观模式
    Head First设计模式之适配器模式
    Head First设计模式之模板方法模式
    VS2013 VS2015 VS2017调试出现无法启动iis express web服务器
    win7经常出现“关闭xxxx前您必须关闭所有会话框”
    微信小程序开发之scroll-view
    HTML5在线预览PDF
    JQuery中根据属性或属性值获得元素
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/8886321.html
Copyright © 2011-2022 走看看