使用MySQL执行Update-Database报错:Keyword not supported: 'userid'
问题分析与解决方案
看起来你踩了一个很典型的EF Core跨数据库适配坑——你的项目默认绑定了SQL Server的EF Core提供者,但你实际要连接的是MySQL,再加上连接字符串关键字不匹配,才导致了这个错误。下面一步步帮你解决:
1. 先装对MySQL的EF Core驱动
首先得给项目安装MySQL对应的EF Core提供者,目前最常用的是Pomelo的驱动。打开包管理器控制台执行:
Install-Package Pomelo.EntityFrameworkCore.MySql -Version [和你EF Core版本匹配的号]
比如你用的是EF Core 6.0.x,就装6.0系列的Pomelo包,版本不匹配会出其他问题。
2. 把DbContext切换到MySQL提供者
找到你项目里的DbContext类(一般在Infrastructure层),修改OnConfiguring方法,把原来的UseSqlServer换成UseMySql:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); // 替换成你的MySQL版本,比如8.0.30 optionsBuilder.UseMySql(configuration.GetConnectionString("DefaultConnection"), new MySqlServerVersion(new Version(8, 0, 30))); } }
如果是.NET 6+的Program.cs里配置服务,就改成:
builder.Services.AddDbContext<YourDbContext>(options => options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"), new MySqlServerVersion(new Version(8, 0, 30))));
3. 修正MySQL连接字符串的关键字
MySQL的连接字符串里,userid不是标准写法,换成user或者uid都可以,修正后的配置:
"ConnectionStrings": { "DefaultConnection": "server=localhost;user=root;pwd=root;port=3306;database=ddd;sslmode=none;" }
4. 重新执行迁移流程
因为之前的迁移是基于SQL Server生成的,先移除它:
Remove-Migration
然后重新生成适配MySQL的迁移:
Add-Migration FirstMigration
最后执行数据库更新:
Update-Database
为啥会出这个错?
你之前Add-Migration成功是因为迁移生成阶段不需要真正连接数据库,但Update-Database时EF Core会用默认的SQL Server驱动去解析你的MySQL连接字符串——而SQL Server的连接字符串里根本没有userid这个关键字(它用的是User ID),所以直接抛出了参数错误。
内容的提问来源于stack exchange,提问作者Thinker
相关产品推荐
相关产品推荐

