当前位置: 首页 > article >正文

C# AutoMapper 10个常用方法总结

前言

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

官网地址:AutoMapper

文档地址:AutoMapper — AutoMapper 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.kler.cn/a/403042.html

相关文章:

  • 【1.2 Getting Started--->Installation Guide】
  • Web3.0安全开发实践:Clarity最佳实践总结
  • Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
  • Linux: network: tcp: TCP: request_sock_TCP: Possible SYN flooding on port 3868.
  • 第 24 章 -Golang 性能优化
  • JavaWeb——Mybatis
  • Spring Boot 项目 myblog 整理
  • 智能购物时代:AI在电商平台的革命性应用
  • 针对AI增强图像大规模鲁棒性测试的数据集
  • 15分钟学 Go 实战项目六 :统计分析工具项目(30000字完整例子)
  • ssl证书,以 Nginx 为例
  • 如何构建高效的接口自动化测试框架?
  • Halcon 分割之区域生长法
  • 拓展Git相关知识(⭐版控工具⭐)
  • 量化交易系统开发-实时行情自动化交易-3.4.3.3.期货市场深度数据
  • Golang语言整合jwt+gin框架实现token
  • 学习threejs,对模型多个动画切换展示
  • Matlab多输入单输出之倾斜手写数字识别
  • os库的常见使用
  • 星融元与焱融科技AI分布式存储软硬件完成兼容性互认证
  • 13.C++内存管理2(C++ new和delete的使用和原理详解,内存泄漏问题)
  • 数据结构(双向链表——c语言实现)
  • Restful API 规范详解
  • 单片机学习笔记 2. LED灯闪烁
  • c++--------《set 和 map》
  • C++手写PCD文件