什麼是 AutoMapper

AutoMapper 是一個簡單的小套件,用來解決一個看似複雜的問題:擺脫手動將一個物件對應到另一個物件的程式碼。這類物件屬性賦值的程式碼重複又枯燥,AutoMapper 就是用來自動完成物件對應的工具。

物件對物件對應器:將一種類型的輸入物件,轉換成另一種類型的輸出物件。

AutoMapper 內建一套慣例規則,只要目標類別符合命名慣例,就能以近乎零設定完成兩個類型之間的對應。

手寫對應程式碼很無聊,測試對應程式碼更無聊。AutoMapper 提供簡單的類型設定,同時也支援對應邏輯的單元測試。

安裝

透過 NuGet 套件管理員主控台安裝

PM> Install-Package AutoMapper

相關擴充套件

  1. AutoMapper.Data:支援 ADO.NET,可以從 IDataReader 讀取資料進行對應
  2. AutoMapper.EF6:EF6 的擴充方法,提供 ProjectTo 非同步投影擴充功能
  3. AutoMapper.Collection:集合等價對應,支援兩個集合比對,進行類別物件相等比較
  4. AutoMapper.Collection.EF:結合 EF 主鍵進行相等判斷,自動處理集合的新增、修改、刪除,實現從 DTO 集合到資料庫實體集合的持久化操作

傳統手動物件賦值範例

有兩個類別 People(來源)和 Person(目標),屬性名稱完全一樣

class People
{
    public int Age { set; get; }
    public string Name { set; get; }
}

class Person
{
    public int Age { set; get; }
    public string Name { set; get; }
}Code language: JavaScript (javascript)

傳統寫法,手動逐一賦值給屬性:

static void Main(string[] args)
{
    People p = new People() { Age = 13, Name = "Jack" };
    Person person = new Person();

    // 手動複製每一個屬性,屬性多時程式碼會非常冗長
    person.Name = p.Name;
    person.Age = p.Age;

    Console.WriteLine(person.Name);
    Console.WriteLine(person.Age);
    Console.ReadKey();
}Code language: JavaScript (javascript)

缺點:屬性越多,重複的賦值程式碼就越多;新增或修改欄位時,所有賦值程式碼都要同步修改,很容易漏寫而產生 bug。

AutoMapper 的作用:取代上面手動寫一堆 xxx.屬性 = yyy.屬性,自動依照慣例複製同名屬性。

什麼是 AutoMapper

發佈留言

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