You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AutoMapper 10版本实现两个对象合并为单个目标对象

AutoMapper 10 多源对象合并映射实现方案(.NET 5+ 依赖注入场景)

步骤1:安装依赖NuGet包

需在项目中安装对应版本的两个包:

  • AutoMapper(10.x 正式版)
  • AutoMapper.Extensions.Microsoft.DependencyInjection(对应适配10.x的版本)

步骤2:新建映射配置Profile类

需新建类,示例命名为MappingProfile.cs,可放在项目根目录或专门的Config文件夹下

using AutoMapper;
// 引入你自己的实体类所在命名空间

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        // 配置两个源对象到目标对象的映射规则
        // 同名属性AutoMapper会自动匹配,无需手动配置
        CreateMap<ApiPerson, MergedPersonModel>();
        CreateMap<DbProgramPerson, MergedPersonModel>();
      
        // 如果有属性名不一致的情况,手动指定映射规则即可,示例:
        // CreateMap<DbProgramPerson, MergedPersonModel>()
        //    .ForMember(dest => dest.LicenseNumber, opt => opt.MapFrom(src => src.ProgramLicenseNo));
    }
}

// 下面是你提到的三个实体类示例,你可以根据自己的业务调整字段
/// <summary>
/// 从API获取的人员信息类
/// </summary>
public class ApiPerson
{
    public string Name { get; set; }
    public string Address { get; set; }
    // 其他API返回字段
}

/// <summary>
/// 从数据库查询的ProgramPerson类
/// </summary>
public class DbProgramPerson
{
    public int PersonId { get; set; }
    public string ProgramLicenseNo { get; set; }
    public DateTime LicenseIssueDate { get; set; }
    // 其他数据库字段
}

/// <summary>
/// 合并后的目标模型类
/// </summary>
public class MergedPersonModel
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string LicenseNumber { get; set; }
    public DateTime LicenseIssueDate { get; set; }
    // 其他你需要的合并后字段
}

步骤3:注册AutoMapper服务

代码放在Startup.cs的ConfigureServices方法中(.NET 5环境);如果是.NET 6+环境,放在Program.cs的顶层语句中

// .NET 5 写法
services.AddAutoMapper(typeof(MappingProfile));

// .NET 6 写法(Program.cs中)
builder.Services.AddAutoMapper(typeof(MappingProfile));

注册完成后AutoMapper会自动扫描MappingProfile里的所有配置,且IMapper接口已注入到服务容器中,可直接在业务代码中注入使用。

步骤4:业务代码中实现合并映射

代码放在你自己的业务服务类、Controller等需要执行合并逻辑的位置

using AutoMapper;

public class PersonService
{
    private readonly IMapper _mapper;

    // 构造函数注入IMapper
    public PersonService(IMapper mapper)
    {
        _mapper = mapper;
    }

    public MergedPersonModel GetMergedPerson(int personId)
    {
        // 1. 分别获取两个数据源的对象
        ApiPerson apiPerson = GetPersonFromApi(personId); // 你自己的API调用逻辑
        DbProgramPerson dbPerson = GetPersonFromDb(personId); // 你自己的数据库查询逻辑

        // 2. 先将第一个源对象映射为目标对象实例
        MergedPersonModel mergedModel = _mapper.Map<MergedPersonModel>(apiPerson);
        // 3. 再将第二个源对象映射到已存在的目标对象实例上,完成合并
        _mapper.Map(dbPerson, mergedModel);

        // 合并完成,直接返回即可
        return mergedModel;
    }

    // 以下是你自己的业务逻辑方法,此处仅做示例
    private ApiPerson GetPersonFromApi(int personId)
    {
        // 调用第三方API获取人员信息的逻辑
        return new ApiPerson();
    }

    private DbProgramPerson GetPersonFromDb(int personId)
    {
        // 查询数据库获取ProgramPerson信息的逻辑
        return new DbProgramPerson();
    }
}

补充说明

  • 如果两个源对象存在同名字段,后执行映射的源会覆盖之前的字段值,你可以根据业务需要调整两个源的映射顺序
  • 如果需要忽略某些字段不参与映射,可以在Profile的映射配置中添加.ForMember(dest => dest.不需要映射的字段, opt => opt.Ignore())即可

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:02