.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 (初始化映射器) 改为基于实例的 API。这一变化增强了灵活性,更适合现代应用程序,尤其是使用依赖注入的应用程序。如果您使用的是 9.0 以前的版本,则可以使用静态 API 方法。但是,对于较新的版本,建议采用上述示例中概述的基于实例的 API。

Iron 软件套件概述

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

Iron 软件套件的主要组件

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

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

  2. IronXL:IronXL 可在无需 Office Interop 的情况下处理 Excel 文件,从而简化数据处理和分析任务。

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

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

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

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

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

与 Automapper 的互补性

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

结论

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

Iron 软件的 Iron Suite 提供多种许可选项,包括 免费试用,以满足不同的项目需求。其许可证分为 Lite、Plus 和 Professional 三级,起价为 $749,可满足不同规模团队的需求,并提供全面的支持功能。将该套件与 Automapper 集成,可大大增强 C# 项目,增加数据处理和文档操作功能。

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

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

免费NuGet下载 总下载量: 10,731,156 查看许可证 >