You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoMapper 9.0移除CreateMissingTypeMaps=true后ProjectTo报错求助

解决AutoMapper 9.0升级后ProjectTo映射缺失的问题

这个报错其实是AutoMapper 9.0版本的一个关键变化导致的——旧版本默认会自动创建缺失的类型映射(也就是你之前依赖的CreateMissingTypeMaps=true的行为),但从9.0开始,这个配置默认被关闭了,而且官方也更推荐显式配置映射关系,避免隐式映射带来的意外问题。

你可以按照下面的步骤来解决:

1. 显式配置类型映射

现在你需要在MapperConfiguration里手动添加源类型到myobject的映射规则,替换掉原来空的配置块。注意这里的源类型不能是object,得用你仓库返回的实际实体类型(比如假设你的Repo返回的是Product实体,就写Product):

MapperConfiguration config = new MapperConfiguration(cfg => {
    // 替换成你实际的源实体类型
    cfg.CreateMap<YourActualSourceEntityType, myobject>();
    
    // 如果源和目标属性名不匹配,还需要手动指定映射规则,比如:
    // cfg.CreateMap<YourActualSourceEntityType, myobject>()
    //     .ForMember(dest => dest.MyObjectName, opt => opt.MapFrom(src => src.EntityName));
});
IMapper mapper = config.CreateMapper();
// 这里也要把source的类型从IQueryable<object>改成实际的实体类型IQueryable<YourActualSourceEntityType>
IQueryable<YourActualSourceEntityType> source = _myRepo.GetResult();
List<myobject> dest = mapper.ProjectTo<myobject>(source).ToList();

2. 为什么之前的IQueryable<object>会有问题?

IQueryable<object>会丢失具体的类型信息,AutoMapper无法正确识别源类型的结构来生成映射表达式。所以最好让你的仓库方法GetResult()返回具体实体类型的IQueryable,而不是object类型。

3. 临时方案:重新开启自动创建映射(不推荐)

如果你暂时不想逐个配置映射,也可以在配置里重新开启CreateMissingTypeMaps,但这只是权宜之计,长期来看显式配置更清晰、更易于维护:

MapperConfiguration config = new MapperConfiguration(cfg => {
    cfg.CreateMissingTypeMaps = true;
});

总的来说,AutoMapper 9.0的这个变化是为了让映射关系更透明,避免因为隐式映射导致的难以排查的问题,所以建议优先采用显式配置的方式。

内容的提问来源于stack exchange,提问作者Valdet Zabeli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:51:11