如何在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
相关产品推荐
相关产品推荐

