設定 Profile

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *