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

如何在Mapster中实现多实体到单个类的映射?

在Mapster中实现多实体到单个DTO的映射

针对你用AutoMapper时通过ProjectTo传递外部实体集(如roles)实现多实体映射的场景,Mapster可以通过以下两种方式实现:

方式一:全局配置注入依赖

如果外部实体集(如roles)是全局固定的,可以在Mapster全局配置中直接引入:

// 全局配置(如Program.cs/Startup.cs)
var roles = _roleManager.Roles;
TypeAdapterConfig<User, UserDto>.NewConfig()
    .Map(dest => dest.Roles, src => 
        src.Roles.Join(roles, a => a.RoleId, b => b.Id, (a, b) => b.Name).ToList()
    );

查询时直接使用ProjectToType:

var users = await _userManager.Users
    .AsNoTracking()
    .ProjectToType<UserDto>()
    .ToListAsync();

方式二:临时配置(AdHoc)传递动态参数

如果需要每次查询传递不同的实体集,可创建临时TypeAdapterConfig并传入ProjectTo:

var roles = _roleManager.Roles;
// 构建临时映射配置
var tempConfig = new TypeAdapterConfig();
tempConfig.NewConfig<User, UserDto>()
    .Map(dest => dest.Roles, src => 
        src.Roles.Join(roles, a => a.RoleId, b => b.Id, (a, b) => b.Name).ToList()
    );

// 传入临时配置执行查询
var users = await _userManager.Users
    .AsNoTracking()
    .ProjectTo<UserDto>(tempConfig)
    .ToListAsync();

说明

Mapster的ProjectTo方法本身没有直接接收匿名参数的重载,但通过全局配置或临时配置,同样可以实现外部实体集与主实体的关联映射,达到和AutoMapper一致的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:25:33