.NET Core 2.0 WebAPI使用EF Core MySQL时类型转换错误求助
解决.NET Core 2.0 EF Core MySQL类型转换错误:ConcreteTypeMapping无法转RelationalTypeMapping
我之前帮同事排查过一模一样的问题,大概率是NuGet包版本不兼容搞的鬼——毕竟.NET Core 2.0属于比较老的框架,EF Core和MySQL驱动的版本匹配要求特别严格,版本不对就会触发底层类型冲突。下面给你一步步的排查和解决方法:
1. 优先检查NuGet包版本匹配
这是最常见的诱因:
- .NET Core 2.0对应的EF Core版本必须是2.0.x系列,不能用3.x及以上版本;
- MySQL的EF Core驱动(比如常用的Pomelo.EntityFrameworkCore.MySql)也要严格对应2.0.x的版本,高版本驱动引入的新类型会和老版EF Core的
RelationalTypeMapping体系不兼容,直接导致强制转换失败。
操作步骤:
- 打开NuGet包管理器,卸载现有的
Microsoft.EntityFrameworkCore和MySQL相关驱动包; - 重新安装指定版本的包(以Pomelo为例):
如果你用的是官方的Install-Package Microsoft.EntityFrameworkCore -Version 2.0.3 Install-Package Pomelo.EntityFrameworkCore.MySql -Version 2.0.1MySql.Data.EntityFrameworkCore,也要找对应2.0的版本(比如8.0.11,适配.NET Core 2.0)。
2. 检查DbContext配置是否正确
确保你在Startup的ConfigureServices里的配置没有混用不同数据库的扩展,比如:
services.AddDbContext<GamerDbContext>(options => options.UseMySql(Configuration.GetConnectionString("GamerDbConnection")));
不要同时引入SqlServer等其他数据库的EF Core扩展,否则可能导致类型冲突。
3. 简化实体映射排查问题
虽然这个错误看起来是底层类型问题,但也可以先简化你的GamerDbContext:
- 只保留一个最简单的实体类和对应的
DbSet; - 重新运行项目,如果不再报错,再逐步添加其他实体,定位是否是某个实体的映射配置(比如自定义类型转换器)导致的问题。
4. 清理项目缓存
有时候NuGet缓存会导致版本混乱,建议:
- 手动删除项目根目录下的
bin和obj文件夹; - 用命令行清理并重新构建:
dotnet clean dotnet restore dotnet build
总结一下:这个错误90%以上都是版本不匹配导致的,先把EF Core和MySQL驱动的版本对齐到.NET Core 2.0对应的系列,基本就能解决问题。
内容的提问来源于stack exchange,提问作者Dillon Dunn
相关产品推荐
相关产品推荐

