Automapper v4.0.30319未映射属性EFState问题咨询
解决AutoMapper v4.0.30319中EFState属性未映射的问题
我来帮你捋清楚这个问题的根源和解决方案——我之前在使用AutoMapper 4.x版本时也遇到过类似的属性未映射告警。你当前的问题出在:AutoMapper 4.x默认会严格校验所有源属性是否都有对应的目标映射(或被显式忽略),而你只在反向映射(POCO→AddressBook)里处理了EFState属性,正向映射(AddressBook→POCO)时AutoMapper找不到这个属性的映射目标,所以触发了未映射的警告或错误。
下面分两种场景给出针对性的解决办法:
场景1:AddressBookPOCO不需要EFState属性
如果你的POCO类不需要保留EFState属性,只需在正向映射里显式忽略源端的EFState属性即可——注意这里要用ForSourceMember(针对源属性),而非ForMember(针对目标属性):
// 正向映射:AddressBook → AddressBookPOCO,忽略源端的EFState cfg.CreateMap<BusinessEntities.Entities.AddressBookEntities.AddressBook, BusinessLayerLogic.POCO.AddressBookPOCO>() .ForSourceMember(src => src.EFState, opt => opt.Ignore()); // 你已配置的反向映射保持不变 cfg.CreateMap<BusinessLayerLogic.POCO.AddressBookPOCO, DCF.CARES.BusinessEntities.Entities.AddressBookEntities.AddressBook>() .ForMember(dest => dest.EFState, opt => opt.Ignore());
场景2:AddressBookPOCO需要EFState属性
如果你的POCO类需要保留EFState属性,直接在AddressBookPOCO中添加与基类AddressBook里EFState类型、名称完全一致的属性即可:
public class AddressBookPOCO { // 其他已有属性... public EFStateType EFState { get; set; } // 替换为你实际的EFState枚举/类型 }
添加完成后,AutoMapper会自动完成该属性的映射,无需额外配置(只要属性名和类型匹配)。
额外提示:全局关闭映射验证(不推荐)
如果你有大量类似基类属性需要忽略,不想逐个配置,可以临时关闭AutoMapper的全局映射验证,但这会隐藏其他潜在的映射问题,所以仅作为应急方案:
cfg.ValidateInlineMaps = false;
更推荐精准忽略需要跳过的属性,这样能保证映射逻辑的严谨性。
内容的提问来源于stack exchange,提问作者user1939378
相关产品推荐
相关产品推荐

