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

C# AutoMapper中如何一次性反向映射显式配置的多个实体成员

解决方案

你不需要为每个ForMember单独添加ReverseMap,正确的写法是所有正向映射规则配置完成后,在链式调用末尾仅调用一次ReverseMap()即可完成全局反向映射的基础配置,完全不会出现你担心的成员配置的源和目标频繁互换的问题。

  • 字段名、类型完全匹配的属性(比如你代码中的SSN、Address),反向映射会自动生效,不需要额外配置。
  • 正向用到自定义MapFrom的特殊映射规则(比如嵌套对象取值、类型强转、方法返回值映射),需要在ReverseMap()之后补充对应反向规则,嵌套对象赋值可以用ForPath方法处理。

示例代码如下:

// 先完整配置 Source -> Destination 的所有正向规则
CreateMap<Source, Destination>()
    .ForMember(dest => dest.FirstName, map => map.MapFrom(src => src.Name.First))                                                                                           
    .ForMember(dest => dest.LastName, map => map.MapFrom(src => src.Name.Last))
    .ForMember(dest => dest.SSN, map => map.MapFrom(src => src.SSN))
    .ForMember(dest => dest.HomePhoneNo, map => map.MapFrom(src => src.HomePhoneNumber()))
    .ForMember(dest => dest.Address, map => map.MapFrom(src => src.Address))
    .ForMember(dest => dest.MaritalStatus, map => map.MapFrom(src => (int)src.MaritalStatus))
    // 所有正向规则写完后仅加一次 ReverseMap,开启 Destination -> Source 的反向映射
    .ReverseMap()
    // 下方配置均为 Destination -> Source 的反向自定义规则
    .ForPath(dest => dest.Name.First, map => map.MapFrom(src => src.FirstName))
    .ForPath(dest => dest.Name.Last, map => map.MapFrom(src => src.LastName))
    .ForMember(dest => dest.MaritalStatus, map => map.MapFrom(src => (YourMaritalStatusEnum)src.MaritalStatus))
    // 假设 Source 中存储手机号的字段为 HomePhone,反向直接赋值即可
    .ForMember(dest => dest.HomePhone, map => map.MapFrom(src => src.HomePhoneNo));

如果你使用的是AutoMapper 10及以上版本,上述写法完全兼容,不需要额外做其他配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:03