.NET 8+EF Core 8调用GetListAsync时出现MissingMethodException异常
升级至.NET 8和EF Core 8后出现
Method not found异常:RelationalTypeMapping.Clone 问题场景
将项目升级到.NET 8和EF Core 8正式版后,执行数据库迁移或调用_bookRepository.GetListAsync()时,抛出如下异常:
Method not found: 'Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.Clone(Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingInfo ByRef)'
异常栈指向Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlTypeMappingSource.FindMapping方法,此前使用EF Core 7时程序运行正常。
原因分析
你项目中使用的Pomelo.EntityFrameworkCore.MySql版本为8.0.0-beta.1,该beta版本是针对EF Core 8的预览版构建的。当EF Core 8正式发布时,内部API的方法签名发生了变更(比如RelationalTypeMapping.Clone的参数形式),导致Pomelo的beta版本无法找到正式版EF Core中已修改的方法,从而引发MissingMethodException。
解决方案
1. 升级Pomelo包到兼容EF Core 8正式版的版本
修改项目的.csproj文件,将Pomelo的包版本更新为正式版8.0.0(若已发布),或兼容EF Core 8正式版的最新稳定版本:
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
注:如果8.0.0正式版尚未发布,可确认Pomelo官方发布的适配EF Core 8正式版的版本号后替换。
2. 清理NuGet缓存并重新还原包
避免旧版本包残留导致的冲突:
# 清理所有NuGet本地缓存 dotnet nuget locals all --clear # 重新还原项目依赖 dotnet restore
3. 验证修复
- 执行数据库迁移命令测试:
dotnet ef migrations list - 调用
_bookRepository.GetListAsync()方法,确认异常不再抛出
额外检查
确保所有EF Core相关的Microsoft包版本统一为8.0.0,你的项目当前配置已满足此要求,无需额外修改。
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

