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 );