AutoMapper是一个能自动完成对象与对象之间转化的开源库;通常DTO(Data Transfer Object数据传输对象)与Model之间的常规转化做法会使代码相当的冗长,AutoMapper作者为了减少这种工作量,写了这个开源库,使DTO与Model之间能够自动的完成转化。
基础使用方法:
public class DTO
{
public string userName {set; get;}
public string age {set; get;}
public string job {set; get;}
}
public class Model
{
public string userName {set; get;}
public string age {set; get;}
public string job {set; get;}
}
上述的DTO与Model,一般情况下,DTO为直接映射数据库中的数据,Model为交互数据,那么如何把两着对象里的数据进行映射呢?
- 通常的做法为:
//DTO与Model之间可以这样转化,因为的对象的属性都为string类型
DTO.userName = Model.userName;
DTO.age = Model.age ;
DTO.job = Model.job ;
- 使用AutoMapper转化:
//首先需要先为DTO与Model之间定义一个映射关系
Mapper.CreateMap<DTO, Model>();
DTO dtoData = GetdtoDataFromDB();
Model modelData = Mapper.Map<DTO, Model>(dtoData );
这里的DTO对象就被AutoMapper自动转化成了Model对象,所以modelData中的userName、age、job的值即为GetdtoDataFromDB()方法取出来的值。
在实际的项目中使用AutoMapper对DTO与Model进行自动转化的时候遇到了一个坑点,其实也不算是坑点,只是一个我没有注意到的地方,这里做一个记录,加深自己的印象。
DTO与Model的结构如下:
// DTO
public class DTO
{
public string userName {set; get;}
public string age {set; get;}
public string job {set; get;}
public AddressDTO address {set ; get;}
}
public class AddressDTO{
public string country {set; get;}
public string province {set; get;}
}
// Model
public class Model
{
public string userName {set; get;}
public string age {set; get;}
public string job {set; get;}
public AddressModel address {set ; get;}
}
public class AddressModel{
public string country {set; get;}
public string province {set; get;}
}
类似与这样的对应的涵盖子实体的我们在写法上面需要修订就需要再添加上子对象的映射
Mapper.CreateMap<DTO, Model>();
Mapper.CreateMap<AddressDTO , AddressModel >();//子对象映射关系
DTO dtoData = GetdtoDataFromDB();
Model modelData = Mapper.Map<DTO, Model>(dtoData );