.NET 6出现AutoMapperMappingException:缺少类型映射配置或不支持映射
排查AutoMapper映射异常步骤
以下是针对你遇到的映射问题的排查及解决方案:
1. 核心问题:AutoMapper配置未被正确加载
你的Program.cs中使用了builder.Services.AddAutoMapper(typeof(IStartup)),但在.NET 6默认模板中不存在IStartup接口,且你的AutoMapperClass(继承Profile的配置类)并未被AutoMapper扫描到,导致映射规则未注册,最终触发映射异常。
修复方案:修正AutoMapper注册代码
将Program.cs中的注册代码替换为以下任意一种:
- 直接指定配置类的类型(推荐):
builder.Services.AddAutoMapper(typeof(AutoMapperClass));
- 扫描当前程序集内所有
Profile实现:
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
2. 验证映射配置是否生效
可以在控制器的Get方法中添加调试代码,确认映射规则已被加载:
public async Task<ActionResult<List<GenresDTO>>> Get() { // 调试:检查是否存在Genres到GenresDTO的映射 var typeMap = mapper.ConfigurationProvider.FindTypeMapFor<Genres, GenresDTO>(); if (typeMap == null) { throw new InvalidOperationException("未找到Genres到GenresDTO的映射配置"); } var genres = await dbContext.Genres.ToListAsync(); return mapper.Map<List<GenresDTO>>(genres); }
如果抛出上述异常,说明配置仍未被加载,需检查:
AutoMapperClass是否被正确标记为public类AutoMapperClass所在的程序集是否被项目引用- 确认AutoMapper NuGet包版本兼容.NET 6(建议使用AutoMapper 12.x及以上版本)
3. 额外检查点
- 确保
Genres实体的Name属性不会为null(如果数据库允许null,映射时不会触发异常,但可能不符合业务逻辑) - 你的
CreateMap<GenresDTO, Genres>().ReverseMap()已经正确生成了Genres到GenresDTO的反向映射规则,只要配置被加载就会生效
内容的提问来源于stack exchange,提问作者fardad
相关产品推荐
相关产品推荐

