.NET 帮助

Automapper C#(如何为开发人员工作)

发布 2024年一月4日
分享:

Automapper 是 C# 中的一个多功能且功能强大的库,旨在促进对象到对象的映射,使复杂对象模型之间的数据传输更容易、更易于维护。 在本文中,我们将探讨 Automapper 如何高效地映射属性、扁平化复杂的对象模型,以及如何处理各种类型的对象(如用户域对象和数据传输对象)。

Automapper 简介

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()
VB   C#

使用 Automapper 的高级映射技术

Automapper 的功能远远超出了简单的属性对属性映射。 它可以熟练地处理更复杂的场景。

扁平化复杂对象模型

Automapper 的优势之一是能够扁平化复杂的对象模型。 该功能在处理嵌套对象时特别有用,可以将这些嵌套属性映射到扁平的目标类结构中。

多功能对象类型处理

Automapper 可以熟练地在各种对象类型(包括用户域对象、DTO 甚至视图模型)之间进行映射,为不同的数据传输需求提供了通用的解决方案。

实际使用示例

为了更好地理解 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()
VB   C#

示例 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()
VB   C#

从 9.0 版开始,AutoMapper 已从静态 API(初始化映射器)在翻译过程中,译者必须将.NET API 转换为基于实例的 API。 这一改动增强了灵活性,更适合现代应用程序,尤其是使用依赖注入的应用程序。 如果您使用的是 9.0 以前的版本,则适用静态 API 方法。 不过,对于较新的版本,建议采用上述示例中概述的基于实例的 API。

Iron Software Suite 概述

"(《世界人权宣言》)Iron Software Suite for .NET.NET 是一个功能强大的软件包,包含一系列库,每个库都有特定的用途。 翻译内容包括创建、阅读和编辑 PDF,将 HTML 转换为 PDF,以及将图像处理为多语言文本等功能。 该套件可满足各种开发需求,是任何 C# 项目的多功能补充。

Iron Software Suite 的主要组件

  1. 用于 PDF 管理的 IronPDF:该组件允许开发人员创建、阅读、编辑和签署 PDF。 它还提供将 HTML 转换为 PDF 的功能,这一功能在从基于网络的数据生成报告或文档时特别有用。

    Automapper C#(如何为开发人员工作):图 1 - IronPDF for .NET:C# PDF 库

  2. IronXL.Excel 文件处理:IronXL.Excel 可方便地处理 Excel 文件,而无需进行 Office Interop,从而简化了数据处理和分析任务。

    Automapper C#(如何为开发人员工作):图 2 - IronXL for .NET:C# Excel 库

    3.用于文本提取的 IronOCR:它可以从图像中提取文本,支持 127 种语言,因此在国际项目中具有很强的通用性。

    Automapper C#(如何为开发人员工作):图 3 - IronOCR for .NET:C# OCR 库

    4.支持 QR 和 BarCode 的 IronBarcode:一个可以读写 QR 码和 BarCode 的库,增强了库存管理、跟踪和其他相关任务的能力。

    Automapper C#(如何为开发人员工作):图 4 - IronBarcode for .NET:C# 条码库

与 Automapper 的互补性

虽然 Automapper 擅长在 C# 中不同对象模型之间映射属性、Iron Software 的库通过提供处理各种数据格式和类型的工具来扩展功能。例如,在使用 Automapper 将用户域对象转换为 DTO 后,可以使用 IronPDF 生成 PDF 格式的综合报告。 同样,使用 Automapper 提取或转换的数据也可以使用 IronXL.Excel 文件操作进行进一步操作或分析。

结论

自动绘图仪是 C# 开发人员的宝贵工具,可简化对象之间的映射任务。 它在映射属性、处理复杂对象模型和提供可定制的映射配置方面的强大功能使其成为高效软件开发的必备工具。 要在任何项目中最大限度地发挥 Automapper 的潜力,了解对象模型的复杂性以及如何配置 Automapper 以满足特定需求至关重要。

Iron Software 的Iron Suite提供多种许可选项,包括免费试用 Iron Software此外,还需要翻译一些新的术语,以适应不同项目的需要。 其 License 分为 Lite、Plus 和 Professional 三级,可满足不同规模团队的需求,并提供全面的支持功能。 将该套件与 Automapper 集成可大大增强 C# 项目的功能,增加数据处理和文档操作能力。

< 前一页
.NET Aspire(针对开发者的工作原理)
下一步 >
C# 字符串分割(对开发人员如何工作)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >