C# AutoMapper 10个常用方法总结

embedded/2024/11/22 3:31:17/

前言

AutoMapper 是一个强大的对象映射库,用于简化和自动化复杂对象之间的转换。

官网地址:AutoMapper

文档地址:AutoMapperAutoMapper documentation

AutoMapper是以.NET(C#)语言开发的一个轻量的处理一个实体对象到另一个实体对象之间映射关系的组件库。开发人员需要做的是通过AutoMapper配置两个实体对象之间的一些映射关系。就可以直接实现映射关系的复用,提高开发效率,减少重复代码。

 

1. 创建映射

在使用 AutoMapper 之前,需要创建映射配置,通常在 Profile 类中进行:

using AutoMapper;public class MappingProfile : Profile
{public MappingProfile(){CreateMap<SourceModel, DestinationModel>();}
}

2. 初始化 AutoMapper

在应用程序启动时,通常会在 Startup.csConfigureServices 方法中(.NET Framework)或 Program.cs(.NET Core)里配置 AutoMapper

services.AddAutoMapper(typeof(MappingProfile)); // 详细代码过程可参考前文
// 也可以利用反射自动扫描当前程序集中的所有继承 Profile 的配置程序

3. 映射对象

使用以下方法进行对象映射

  • Mapper.Map<TDestination>(source)

    将源对象映射到目标类型。

    var destination = Mapper.Map<DestinationModel>(source);
    
  • Mapper.Map(source, destination)

    将源对象的值映射到已存在的目标对象。

    Mapper.Map(source, destination);
    

4. 使用依赖注入的 IMapper

如果使用依赖注入,可以直接在构造函数中注入 IMapper,如下代码:

public class PersonService
{private readonly IMapper _mapper;public PersonService(IMapper mapper){_mapper = mapper;}public DestinationModel Convert(SourceModel source){return _mapper.Map<DestinationModel>(source);}
}

5. 配置映射选项

自定义映射的行为可以通过各种选项进行配置。

例如,忽略某些属性、使用自定义转换等:

  • 忽略属性

    CreateMap<SourceModel, DestinationModel>().ForMember(dest => dest.SomeProperty, opt => opt.Ignore());
    
  • 使用自定义转换

    CreateMap<SourceModel, DestinationModel>().ForMember(dest => dest.SomeProperty, opt => opt.MapFrom(src => CustomConversion(src)));
    

6. 集合映射

AutoMapper 支持直接映射集合:

var sourceList = new List<SourceModel> { /* ... */ };
var destinationList = _mapper.Map<List<DestinationModel>>(sourceList);

7. 条件映射

支持根据特定条件进行映射:

CreateMap<SourceModel, DestinationModel>().ForMember(dest => dest.SomeProperty, opt => opt.Condition(src => src.SomeCondition == true));

8. 映射嵌套对象

AutoMapper 还支持嵌套对象的映射:

CreateMap<ParentSourceModel, ParentDestinationModel>();
CreateMap<ChildSourceModel, ChildDestinationModel>();

只需创建好子映射,AutoMapper 会自动处理嵌套关系。

9. 自定义解析器

可以定义自定义解析器以处理更复杂的映射逻辑:

// 自定义解析器
public class CustomValueResolver : IValueResolver<SourceModel, DestinationModel, string>
{public string Resolve(SourceModel source, DestinationModel destination, string destMember, ResolutionContext context){// 返回处理后的值return source.SomeProperty + " - custom";}
}// 在映射中使用自定义解析器
CreateMap<SourceModel, DestinationModel>().ForMember(dest => dest.SomeProperty, opt => opt.MapFrom<CustomValueResolver>());

10. 逆向映射

可以启用逆向映射以允许从目标类型到源类型的映射,这在需要从 DTO 转换回实体时非常有用:

CreateMap<SourceModel, DestinationModel>().ReverseMap();

总结

以上是 AutoMapper 的一些常用方法和功能。

在实际使用中,可以根据具体需求创建和配置映射,以确保对象之间的转换能满足业务的要求。


http://www.ppmy.cn/embedded/139507.html

相关文章

论文PDF页面无法下载PDF

问题&#xff1a;通常在下载学术论文时&#xff0c;网页命名是PDF页面&#xff0c;但是无法下载PDF&#xff0c;下载的是html网页 解决&#xff1a; mac&#xff1a;按F12打开开发者界面 然后点击源代码/来源选项 然后打开下图所在位置&#xff0c;鼠标右键复制链接&#xff…

深入探索Golang的GMP调度机制:源码解析与实现原理

在Golang&#xff08;又称Go语言&#xff09;的并发编程模型中&#xff0c;GMP调度模型扮演着举足轻重的角色。GMP分别代表Goroutine&#xff08;协程&#xff09;、M&#xff08;Machine&#xff0c;即内核线程&#xff09;和P&#xff08;Processor&#xff0c;即逻辑处理器&…

第7章硬件测试-7.3 功能测试

7.3 功能测试 7.3.1 整机规格测试7.3.2 整机试装测试7.3.3 DFX测试 功能测试包括整机规格、整机试装和整机功能测试&#xff0c;是整机结构和业务相关的测试。 7.3.1 整机规格测试 整机规格测试包括尺寸、重量、温度、功耗等数据。这些测试数据与设计规格进行比对和校验&…

计算机网络各层设备总结归纳(更新ing)

计算机网络按照OSI&#xff08;开放式系统互联&#xff09;模型分为七层&#xff0c;每一层都有其特定的功能和对应的网络设备。以下是各层对应的设备&#xff1a; 1. 物理层&#xff08;Physical Layer) 设备&#xff1a;中继器&#xff08;Repeater&#xff09;、集线器…

Elasticsearch面试内容整理-性能优化

Elasticsearch 性能优化涉及多个方面,包括集群架构、索引配置、查询优化和硬件配置等。性能优化旨在提高搜索速度、写入性能和集群的稳定性。以下是关于 Elasticsearch 性能优化的详细指南: 1. 集群配置与架构优化 节点类型与角色划分 节点类型的角色划分:

Pycharm

Pycharm PycharmPycharm汉化Pycharm基本设置 Pycharm PyCharm是一种Python IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高…

如果使用wmic 在bat脚本中获取当前系统时间?

如果必须使用 wmic 来实现计时功能&#xff0c;那么虽然无法直接通过 wmic os get tickcount 获取滴答计数&#xff08;因为在部分系统中不支持&#xff09;&#xff0c;可以通过 wmic 获取系统的当前时间&#xff0c;然后通过日期和时间的计算间接实现计时功能。 以下是基于 …

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意&#xff0c;我们使用的是Mac&#xff0c;所以ios pack并不能使用。 如何嫌官网上下载比较慢的话&#xff0c;可以考虑在csdn网站上下载&#xff0c;应该也是可以找到的。 2、cmake的下载 官网的链接&…