.NET 幫助

Automapper C#(對開發人員的作用原理)

Automapper 是一個多功能且強大的 C# 庫,旨在促進物件到物件的映射,使在複雜物件模型之間轉移數據變得更簡單且更易於維護。 在本文中,我們將探討 Automapper 如何有效地映射屬性、展平複雜的物件模型,並處理各種類型的物件,如用戶領域對象和資料傳輸對象。

Automapper介紹

Automapper in C# 是一個對象對象的映射工具,可以簡化不同對象類型之間的數據轉換和傳輸。這在涉及數據實體及其轉換為數據傳輸對象(DTOs)的情境中特別有用。

Automapper 的關鍵功能

簡化代碼:Automapper 通過自動映射屬性,顯著減少對手動代碼的需求,從而防止錯誤並節省時間。

映射配置的靈活性:Automapper允許詳細自定義映射配置,適用於各種映射情境。

效能效率:該函式庫設計用於處理大型且複雜的物件模型,而不會帶來顯著的效能負擔。

開始使用Automapper

要使用Automapper,首先必須透過套件管理器控制台進行安裝,這是開發環境的一個元件,方便軟體套件的管理。

透過套件管理器主控台安裝

您可以透過在套件管理器主控台中執行一個簡單命令,輕鬆地將Automapper安裝到您的專案中:

Install-Package IronPdf

設定基本映射配置

在使用Automapper的基本步驟是定義映射配置。 這涉及指定如何將輸入對象(來源)的屬性轉移到輸出對象(目的地)。

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
Dim config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel

使用Automapper的高級映射技術

Automapper 的功能遠超簡單的屬性對屬性映射。 它可以熟练处理更复杂的情境。

扁平化複雜物件模型

Automapper 的一個優勢是其可以將複雜的物件模型扁平化。 此功能在處理嵌套物件時特別有用,可將這些嵌套屬性映射到平坦的目標類結構。

多功能物件類型處理

Automapper 能夠熟練地在各種物件類型之間進行映射,包括使用者領域物件、DTOs,甚至是視圖模型,為不同的資料傳輸需求提供多功能的解決方案。

實際使用範例

為了更好地了解Automapper的實用性,讓我們來探索一些實際的例子。

範例 1:簡單映射

考慮一個情境,我們需要將使用者實體的屬性映射到使用者 DTO:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}
public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}
// Mapping Configuration
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}
public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}
// Mapping Configuration
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
Public Class User
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Address() As String
	Public Property City() As String
End Class
Public Class UserDTO
	Public Property FullName() As String
	Public Property Address() As String
	Public Property City() As String
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel

範例 2:使用複雜物件進行進階映射

在較複雜的情況下,我們將具有巢狀使用者詳細資訊的訂單物件對應到簡化的訂單 DTO:

public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}
public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}
// Mapping Configuration
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}
public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}
// Mapping Configuration
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Public Class Order
	Public Property OrderedBy() As User
	' Other properties...
End Class
Public Class OrderDTO
	Public Property FullName() As String
	' Other properties...
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel

在9.0版本中,AutoMapper已從靜態API(Mapper.Initialize)過渡到基於實例的API。 此變更增強了靈活性,更適合現代應用程式,特別是那些使用相依注入的應用程式。 如果您使用的是9.0以下版本,則靜態API方法適用。 然而,對於較新版本,建議採用上述示例中的基於實例的 API。

Iron Software 套件概覽

Iron Software Suite for .NET 是一個強大的套件,包含一系列的程式庫,每個程式庫都有其特定的用途。 涵蓋功能包括創建、閱讀和編輯 PDF,將 HTML 轉換為 PDF,以及將圖像處理成多種語言的文本。 此套件滿足各種開發需求,使其成為任何 C# 項目的多功能補充。

Iron Software 套件的關鍵組件

  1. IronPDF for PDF Management:此元件允許開發人員創建、讀取、編輯和簽署 PDF。 它還提供將 HTML 轉換為 PDF 的功能,這項功能在從基於網路的數據生成報告或文件時特別有用。

    Automapper C#(開發人員如何使用):圖1 - IronPDF for .NET:C# PDF庫

  2. IronXL Excel 文件處理:IronXL 無需使用 Office Interop 就能輕鬆處理 Excel 文件,簡化數據操作和分析任務。

    Automapper C#(對開發人員的作用):圖 2 - IronXL for .NET:C# Excel 庫

  3. IronOCR for Text Extraction:它能夠從影像中擷取文字,支援多達127種語言,對於國際專案來說非常多元化。

    Automapper C#(對開發人員的運作方式):圖 3 - IronOCR for .NET:C# OCR 庫

  4. IronBarcode for QR and Barcode Support:一個允許讀取和編寫QR碼和條碼的程式庫,增強庫存管理、追蹤及其他相關任務的能力。

    Automapper C#(對開發者的運行方式):圖 4 - IronBarcode for .NET:C# 條碼庫

與Automapper的互補性

雖然Automapper在C#中擅長在不同對象模型之間映射屬性,Iron Software's Libraries則通過提供處理各種數據格式和類型的工具來擴展功能。例如,在使用Automapper將一個用戶領域對象轉換為DTO後,可以使用IronPDF生成PDF格式的綜合報告。 同樣地,使用Automapper提取或轉換的數據可進一步使用IronXL進行Excel文件操作來處理或分析。

結論

Automapper 是 C# 開發人員的重要工具,可以簡化物件之間的映射任務。 其在映射屬性、處理複雜對象模型,以及提供可自定義的映射配置方面的強大功能,使其成為高效軟體開發的必備工具。 了解物件模型的複雜性以及如何配置Automapper以符合特定需求,這對於在任何專案中最大化其潛力至關重要。

Iron Software 的Iron Suite提供多種授權選項,包括Iron Software 的免費試用,以滿足不同項目的需求。 其授權分為 Lite、Plus 和 Professional,滿足不同團隊規模的需求,並提供全面的支持功能。 將此套件與Automapper整合可以大大提升C#項目,增加資料處理和文件操作功能。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
.NET Aspire(它如何為開發者工作)
下一個 >
C# 字串分割(開發人員的運作方式)