码迷,mamicode.com
首页 > 移动开发 > 详细

AutoMapper

时间:2018-04-20 00:22:15      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:报错   类型   ber   create   style   基础上   assert   class   目标   

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);
//源类型会被映射为目标类型
//源子类型会被映射为目标子类型

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

AutoMapper

标签:报错   类型   ber   create   style   基础上   assert   class   目标   

原文地址:https://www.cnblogs.com/nicopoiduang/p/8886321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!