Profile 的作用:把大量的對應規則抽離到獨立的類別中,不要全部擠在 Main 方法裡,這樣比較好管理多個實體的對應關係。
1、自訂 Profile 類別
繼承 AutoMapper 提供的 Profile 基底類別,在建構函式裡撰寫對應規則,可以一次寫多條 CreateMap。
using AutoMapper;
/// <summary>
/// 對應設定類別
/// </summary>
public class MappingProfile : Profile
{
public MappingProfile()
{
// Person → People
CreateMap<Person, People>();
// People → Person,雙向對應
CreateMap<People, Person>();
}
}
// [程式碼區塊中文翻譯]
// 對應設定類別
// Person → People
// 雙向對應
Code language: HTML, XML (xml)
方式 1:初始化時加入 Profile
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
Code language: JavaScript (javascript)
方式 2:完整寫法,建立 Profile 物件實體
var mc = new MapperConfigurationExpression();
mc.AddProfile(new MappingProfile());
Mapper.Initialize(mc);
// [程式碼區塊中文翻譯]
// 建立 Profile 物件實體
Code language: JavaScript (javascript)
2、載入多個 Profile
專案業務變複雜時,會拆分出多個 Profile 類別,可以一次全部註冊:
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
x.AddProfile<MappingProfile2>();
});
Code language: HTML, XML (xml)
完整 Program 範例
class Program
{
static void Main(string[] args)
{
// ========= 設定:載入 Profile 對應 =========
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
// 來源物件、目標物件
Person p = new Person()
{
Age = 12,
Name = "Tom",
Birthday = DateTime.Now,
Sex = true,
Salary = 10000
};
People peo = new People()
{
Age = 36,
Name = "Jack",
Birthday = DateTime.Now,
Sex = true,
Salary = 102000
};
// 正向對應 Person → People
Mapper.Map(p, peo);
// 反向對應 People → Person
Mapper.Map(peo, p);
Console.WriteLine(peo.Name);
Console.WriteLine(p.Name);
Console.ReadKey();
}
}
// [程式碼區塊中文翻譯]
// 設定:載入 Profile 對應
// 來源物件、目標物件
// 正向對應 Person → People
// 反向對應 People → Person
Code language: JavaScript (javascript)
設定 Profile
Previous: 安裝與第一個範例
Next: 扁平化對應(Flattening)