求助解决AddAsync方法中AutoMapper类型映射配置缺失错误
解决AutoMapper的Missing type map configuration错误
咱们直接说问题根源:你在MapperConfig里只配置了从Departments实体到DepartmentsViewModel的映射,但你的AddAsync方法需要的是反向的DepartmentsViewModel到Departments实体的映射——AutoMapper默认不会自动生成双向映射规则,所以才抛出了这个错误。
解决方案
给你两种可行的解决办法,推荐第一种,简洁又高效:
方法1:用ReverseMap()自动生成双向映射
修改MapperConfig中的映射配置,给Departments到DepartmentsViewModel的映射加上.ReverseMap(),AutoMapper会自动帮你生成反向的映射规则:
public class MapperConfig : IMapperConfig { public IMapper CreateMapper() { var config = new MapperConfiguration(cfg => { cfg.CreateMap<RegisterStaffs, RegisterStaffViewModel>(); cfg.CreateMap<AttendanceRecorder, AttendanceRecorderViewModel>(); cfg.CreateMap<ManageLeaves, ManageLeavesViewModel>(); cfg.CreateMap<RegisterDevices, RegisterDevicesViewModel>(); // 加上ReverseMap(),自动生成DepartmentsViewModel -> Departments的映射 cfg.CreateMap<Departments, DepartmentsViewModel>().ReverseMap(); }); // 开发环境建议加上这句,启动时就检查映射配置是否完整,避免运行时踩坑 config.AssertConfigurationIsValid(); return config.CreateMapper(); } }
方法2:手动创建反向映射
如果你需要对反向映射做自定义配置(比如某些属性的特殊映射逻辑),可以手动添加反向映射规则:
public class MapperConfig : IMapperConfig { public IMapper CreateMapper() { var config = new MapperConfiguration(cfg => { cfg.CreateMap<RegisterStaffs, RegisterStaffViewModel>(); cfg.CreateMap<AttendanceRecorder, AttendanceRecorderViewModel>(); cfg.CreateMap<ManageLeaves, ManageLeavesViewModel>(); cfg.CreateMap<RegisterDevices, RegisterDevicesViewModel>(); cfg.CreateMap<Departments, DepartmentsViewModel>(); // 手动添加反向映射 cfg.CreateMap<DepartmentsViewModel, Departments>(); }); config.AssertConfigurationIsValid(); return config.CreateMapper(); } }
不过你的场景里两个类的属性名称、类型完全匹配,第一种方法完全够用。
额外优化建议
其实你可以简化服务注册的方式,不用自定义IMapperConfig,直接用AutoMapper官方的注册方式更省心:
// 替换原来的services.AddSingleton<IMapperConfig, MapperConfig>(); services.AddAutoMapper(typeof(MapperConfig));
这样AutoMapper会自动扫描你的映射配置类,直接注册好IMapper实例,后续在DepartmentManager里直接注入IMapper就行,不用自己手动创建实例。
修改完配置后重启应用,再测试AddAsync方法应该就能正常运行了。
内容的提问来源于stack exchange,提问作者Alazar Komar
相关产品推荐
相关产品推荐

