如何阻止AutoMapper ProjectTo映射同名不同类型的字段?
解决AutoMapper ProjectTo中同名不同类型字段的自动映射问题
要阻止AutoMapper自动尝试映射同名但类型不同的CategoryType字段,同时保留你已配置的构造函数参数映射,可采用以下两种方法:
方法1:忽略目标字段的自动映射
通过.ForMember()明确告诉AutoMapper不要处理目标对象的CategoryType字段,因为该字段已通过构造函数参数初始化:
CreateMap<Type1, Type2>() // 保留你已配置的构造函数参数映射 .ForCtorParam(nameof(Type2.CategoryType), opt => opt.MapFrom(src => src.CategoryTypeId)) // 阻止AutoMapper自动映射目标的CategoryType字段 .ForMember(dest => dest.CategoryType, opt => opt.Ignore());
方法2:跳过源成员的映射处理
直接让AutoMapper完全忽略源对象中的CategoryType成员,避免它尝试匹配同名的目标字段:
CreateMap<Type1, Type2>() .ForCtorParam(nameof(Type2.CategoryType), opt => opt.MapFrom(src => src.CategoryTypeId)) // 跳过源对象的CategoryType成员的映射逻辑 .ForSourceMember(src => src.CategoryType, opt => opt.DoNotMap());
关于.DoNotValidate()无效的原因
.DoNotValidate()仅关闭了对源成员的验证逻辑(比如检查成员是否存在、是否可访问),但AutoMapper仍然会尝试生成从源成员到目标同名成员的映射表达式,这才是导致类型不匹配错误的核心原因。而上述两种方法会完全阻止AutoMapper处理该同名成员的映射逻辑,从根源解决问题。
内容的提问来源于stack exchange,提问作者TCR
相关产品推荐
相关产品推荐

