ASP.NET Core使用EntityFrameworkCore创建迁移时MySQL驱动报错如何解决?
报错原因
你遇到的Method 'Create' in type 'MySQLSqlTranslatingExpressionVisitorFactory' does not have an implementation报错,本质是Oracle官方MySQL EF Core驱动MySql.Data.EntityFrameworkCore 8.0.22和项目中安装的Microsoft.EntityFrameworkCore版本不兼容,该版本驱动仅支持EF Core 3.x,若项目EF Core版本为5及以上就会触发该错误。
解决方案
方案一(推荐):替换为社区维护的Pomelo MySQL驱动
Pomelo.EntityFrameworkCore.MySql是目前.NET生态最常用的MySQL EF Core驱动,版本更新及时、兼容性更好,操作步骤如下:
- 卸载项目中已安装的
MySql.Data.EntityFrameworkCore、MySql.Data相关NuGet包 - 安装与项目.NET版本匹配的Pomelo驱动:
- .NET Core 3.x 对应 Pomelo 3.x版本
- .NET 5 对应 Pomelo 5.x版本
- .NET 6 对应 Pomelo 6.x版本
- .NET 7/8 对应对应大版本的Pomelo驱动
- 修改
Startup.cs中DbContext注册代码,替换原有UseMySQL逻辑:
services.AddDbContext<MessageDBContext>(options => options.UseMySql( Configuration.GetConnectionString("DefaultConnection"), // 此处替换为你实际使用的MySQL版本 new MySqlServerVersion(new Version(8, 0, 22)) ));
方案二:继续使用官方驱动对齐版本
如果坚持使用Oracle官方驱动,需要严格对齐EF Core和驱动版本:
- 首先确认项目当前安装的
Microsoft.EntityFrameworkCore大版本号 - 安装与EF Core大版本完全匹配的
MySql.Data.EntityFrameworkCore版本,比如EF Core 3.1就使用8.0.22版本,EF Core 6就安装官方推出的支持EF Core 6的对应驱动版本
额外代码问题修复
你的Message实体类中TelephoneNumber字段定义为int类型存在问题:
- int类型最大值为2147483647,无法存储11位及以上的手机号
MaxLength特性对int类型无效
建议将该字段修改为string类型:
[Required] [MaxLength(15)] public string TelephoneNumber { get; set; }
内容的提问来源于stack exchange,提问作者Sergey Mkrtumyan
相关产品推荐
相关产品推荐

