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

如何配置AutoMapper避免覆盖映射中未定义的属性?

解决AutoMapper映射时保留原有字段值的问题

问题分析

两次映射后Phone字段被置为null,原因是第二次用EmployeeOtherAddressDto映射到Employee对象时,AutoMapper默认会处理所有匹配成员(即使源成员为null或不存在),覆盖了之前的Phone值。需要让映射仅更新Address1和Address2,保留Phone的原有值。

解决方案

修改EmployeeOtherAddressDto到Employee的映射配置,明确忽略Phone字段,映射时就不会修改该字段的原有值:

CreateMap<EmployeeOtherAddressDto, Employee>()
    .ForMember(dest => dest.Address1, options => options.MapFrom(src => src.Address1))
    .ForMember(dest => dest.Address2, options => options.MapFrom(src => src.Address2))
    .ForMember(dest => dest.Phone, options => options.Ignore()) // 忽略Phone字段,保留原有值
    .ValidateMemberList(MemberList.None)
    .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));

原理说明

  • .ForMember(dest => dest.Phone, options => options.Ignore()) 告诉AutoMapper映射时完全跳过Phone字段,不做任何修改,自然保留第一次映射后的值。
  • 原有的.ForAllMembers条件依然生效,确保Address1和Address2只有在源成员不为null时才会覆盖目标值。

修改后,第二次映射只会更新Address1和Address2,Phone字段会保持第一次映射的"0000000000"值,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:10:43