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

如何同时解决Mapperly中CS8795与RMG007错误并精简代码?

解决Mapperly的CS8795和RMG007错误,以及反向映射精简方案

一、同时解决两类错误的方案

1. 处理CS8795错误

必须保留[Mapper]特性。Map(User)和Map(UserDto)这两个分部方法没有手动实现,完全依赖Mapperly在编译阶段自动生成实现代码。移除[Mapper]后,C#编译器要求所有带访问修饰符的分部方法必须有显式实现,因此触发该错误。保留[Mapper]即可让Mapperly自动生成这两个方法的实现,解决该问题。

2. 处理RMG007错误

该错误源于Mapperly无法自动将UsersToRoleDto的string类型成员(User、Role)映射到UsersToRole的实体类型成员(User、Role)。但你已经手动实现了这两组双向映射的分部方法,此时只要确保手动实现的方法签名和分部声明完全一致(你的当前代码已满足),Mapperly就会优先使用手动实现,不会尝试自动生成对应代码。如果仍报错,可检查两点:

  • 确认User.FullName、Role.Name都是公共可访问的属性;
  • 升级Mapperly到最新稳定版本,规避版本兼容问题。

二、类似AutoMapper ReverseMap()的代码精简方式

Mapperly支持通过[MapReverse]特性自动生成反向映射,无需手动编写完整的反向映射方法。针对你的场景,精简后的代码示例如下:

using Riok.Mapperly.Abstractions;
namespace Application.Profiles;

[Mapper]
public partial class MapperlyMapper
{
    // 标记正向映射,让Mapperly自动生成反向映射的分部声明
    [MapReverse]
    public partial UsersToRoleDto Map(UsersToRole usersToRole);
    
    // 手动实现正向映射的自定义逻辑
    public partial UsersToRoleDto Map(UsersToRole usersToRole)
    {
        return new UsersToRoleDto
        {
            User = usersToRole.User.FullName,
            Role = usersToRole.Role.Name
        };
    }

    // 定义string到User实体的转换方法,供反向映射调用
    [MapperMappingOptions(
        TargetMember = nameof(UsersToRole.User),
        SourceMember = nameof(UsersToRoleDto.User)
    )]
    private partial User MapUserFromString(string fullName)
    {
        return new User { FullName = fullName };
    }

    // 定义string到Role实体的转换方法,供反向映射调用
    [MapperMappingOptions(
        TargetMember = nameof(UsersToRole.Role),
        SourceMember = nameof(UsersToRoleDto.Role)
    )]
    private partial Role MapRoleFromString(string roleName)
    {
        return new Role { Name = roleName };
    }

    // Mapperly自动生成这两个方法的实现
    public partial UserDto Map(User user);
    public partial User Map(UserDto userDto);
}

核心优化点:

  1. 用[MapReverse]标记正向映射方法,Mapperly会自动生成反向映射的分部方法;
  2. 编写自定义类型转换方法,通过[MapperMappingOptions]指定转换规则,Mapperly在生成反向映射时会自动调用这些方法,无需手动编写完整的反向映射实现。

内容的提问来源于stack exchange,提问作者M.Bouabdallah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:46:03