使用AutoMapper遇AutoMapperMappingException:缺失类型映射配置求助
解决AutoMapper的"Missing type map configuration"异常
我看了你的代码,问题主要出在属性名称拼写不一致和一些小细节上,下面一步步帮你排查修复:
1. 修正集合属性的名称大小写
你的实体类Entities.MyClass里的集合属性是SKills(注意字母K是大写),但契约类的MyClass里对应的是Skills(k是小写)。AutoMapper默认是区分大小写的名称匹配,这就导致它找不到对应的映射源,直接抛出异常。
你有两种修复方式:
- 统一属性名称:把实体类里的
SKills改成Skills,和契约类保持一致:// 实体类MyClass修改后 public class MyClass { public int Id { get; set; } public int StatusId { get; set; } public Status Status { get; set; } public ICollection<SKill> Skills { get; set; } // 把SKills改成Skills } - 手动指定映射关系:如果不想改实体类名称,就在映射配置里给这个属性加
ForMember配置:CreateMap<Entities.MyClass, MyClass>() // 手动映射Skills集合 .ForMember(dest => dest.Skills, opt => opt.MapFrom(src => src.SKills));
2. 简化冗余的映射配置
你写的.ForMember(dest => dest.Status, src => src.MapFrom(x => x.Status))其实是多余的——因为源和目标的属性名称都是Status,类型也完全一致,AutoMapper会自动处理这个映射,删掉这行能让配置更简洁。
3. 确认基础类型映射的有效性
你已经配置了CreateMap<Entities.SKill, Skill>()和CreateMap<Entities.Status, Status>(),这点没问题,但要确保Entities.SKill和契约类Skill的属性名称、类型都能一一匹配,AutoMapper才能自动映射每个成员。
完整修复后的映射配置
// 基础类型映射 CreateMap<Entities.SKill, Skill>(); CreateMap<Entities.Status, Status>(); // MyClass的映射(如果统一了属性名称,无需额外配置) CreateMap<Entities.MyClass, MyClass>();
额外提示:避免同名类混淆
你的实体类和契约类都叫MyClass,虽然应该在不同命名空间下,但编码时很容易搞混,建议给契约类加个后缀(比如MyClassDto),这样代码可读性更高,也能避免潜在的命名冲突。
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

