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

AutoMap Reverse模式下Ignore属性未生效问题咨询

问题解答

这不是正常现象,是AutoMapper中ReverseMap与[Ignore]特性的作用范围导致的问题。

原因分析

当你在UserDto上使用[AutoMap(typeof(User), ReverseMap = true)]时,会自动生成两个映射规则:

  • 正向映射(User → UserDto):此时UserDto上的[Ignore]特性生效,映射时会忽略Password属性,不会将User的Password复制到UserDto。
  • 反向映射(UserDto → User):ReverseMap仅自动生成反向的基础映射规则,但不会自动将源类(UserDto)的[Ignore]特性应用到反向映射中。因为[Ignore]特性默认作用是忽略当前类的成员作为「目标成员」时的映射,而非作为「源成员」时。当从UserDto映射到User时,UserDto.Password是源成员,[Ignore]不会阻止它被复制到User.Password。

解决方案

要让反向映射也忽略Password属性,需要显式配置反向映射规则:

方式1:使用Profile类手动配置

public class UserProfile : Profile
{
    public UserProfile()
    {
        CreateMap<User, UserDto>()
            .ReverseMap()
            // 显式忽略反向映射中的Password属性
            .ForMember(dest => dest.Password, opt => opt.Ignore());
    }
}

方式2:特性补充配置(不推荐)

如果坚持使用特性,可以在User实体的Password属性上标记[Ignore],但这种方式会影响所有以User为目标的映射,灵活性较差。

验证

修改配置后,执行_mapper.Map(dto, user)时,UserDto.Password就不会再被复制到User.Password了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:22