C#中Controller模型类映射领域模型类报错求助
问题描述(中文翻译)
我有如下Controller层模型类:
public class Request { public Account Account { get; set; } } public class Account { public string Number { get; set; } public List<Holder> Holder { get; set; } } public class Holder { public string FirstName { get; set; } public string LastName { get; set; } }
领域层模型类如下:
public class AccountRequest { public string Number { get; set; } public List<Holder> Holder { get; set; } } public class Holder { public string FirstName { get; set; } public string LastName { get; set; } }
我在AccountMapper里做了如下映射配置:
CreateMap<Models.Request, AccountRequest>() .ForMember(dest => dest.Holder, opt => opt.MapFrom(src => src.Account.Holder));
结果报错:
Missing type map configuration or unsupported mapping.
Mapping types:
Holder -> Holder
Controllers.v2.Models.Holder -> Contracts.Domain.Holder
请求帮忙解决这个模型或映射器的问题,我用List是因为请求负载格式是这样的,有没有其他实现方式?
"Holder": [ { "FirstName": "abc", "LastName": "xyz" }, { "FirstName": "tqq", "LastName": "kdi" } ]
问题原因
报错核心是两个Holder类分属不同命名空间(Controllers.v2.Models 和 Contracts.Domain),哪怕属性完全一致,AutoMapper也不会自动识别并映射它们,必须显式配置这两个类的映射规则。另外当前映射还漏掉了Number字段的映射逻辑。
解决步骤
添加
Holder类的映射配置
在AccountMapper中,新增两个Holder类的映射规则(可根据实际命名空间简化):// 若已通过using引入对应命名空间,可简化为CreateMap<Models.Holder, Domain.Holder>() CreateMap<Controllers.v2.Models.Holder, Contracts.Domain.Holder>();完善
Request到AccountRequest的完整映射
补上Number字段的映射逻辑,最终配置如下:CreateMap<Models.Request, AccountRequest>() .ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.Account.Number)) .ForMember(dest => dest.Holder, opt => opt.MapFrom(src => src.Account.Holder)); CreateMap<Controllers.v2.Models.Holder, Contracts.Domain.Holder>();关于List的使用
你的请求负载是数组格式,用List<Holder>完全适配,无需更换类型。如果追求灵活性,也可以用IEnumerable<Holder>或ICollection<Holder>,AutoMapper对这些集合类型的映射都支持,效果一致。
内容的提问来源于stack exchange,提问作者Dee
相关产品推荐
相关产品推荐

