AutoMapper 是一個簡單的小套件,用來解決一個看似複雜的問題:擺脫手動將一個物件對應到另一個物件的程式碼。這類物件屬性賦值的程式碼重複又枯燥,AutoMapper 就是用來自動完成物件對應的工具。
物件對物件對應器:將一種類型的輸入物件,轉換成另一種類型的輸出物件。
AutoMapper 內建一套慣例規則,只要目標類別符合命名慣例,就能以近乎零設定完成兩個類型之間的對應。
手寫對應程式碼很無聊,測試對應程式碼更無聊。AutoMapper 提供簡單的類型設定,同時也支援對應邏輯的單元測試。
安裝
透過 NuGet 套件管理員主控台安裝
PM> Install-Package AutoMapper
相關擴充套件
- AutoMapper.Data:支援 ADO.NET,可以從
IDataReader讀取資料進行對應 - AutoMapper.EF6:EF6 的擴充方法,提供
ProjectTo非同步投影擴充功能 - AutoMapper.Collection:集合等價對應,支援兩個集合比對,進行類別物件相等比較
- 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
Next: 安裝與第一個範例