.Net Core 8 EF(MySQL)迁移时存储过程参数未定义错误解决
解决MySQL EF迁移执行时"Parameter '@SQL_EXP' must be defined"错误
错误原因
Oracle的MySql.EntityFrameworkCore生成的迁移脚本中使用了MySQL用户变量@SQL_EXP,但MySql.Data.MySqlClient驱动默认会将@开头的标识符识别为ADO.NET命令参数,而非MySQL用户变量,导致驱动尝试寻找未定义的参数,触发错误。
解决步骤
方法1:修改数据库连接字符串(推荐)
在项目配置文件(如appsettings.json或appsettings.Development.json)的MySQL连接字符串中添加AllowUserVariables=True配置项,允许驱动识别MySQL用户变量:
"ConnectionStrings": { "DefaultConnection": "server=localhost;database=你的数据库名;user=用户名;password=密码;AllowUserVariables=True" }
保存配置后,重新执行迁移命令:
dotnet ef database update
方法2:手动修改迁移脚本
如果连接字符串修改无效,可直接编辑生成的迁移文件:
- 找到对应迁移的C#文件(格式为
202XXXXXXXX_你的迁移名称.cs) - 在
Up方法中定位到创建MYSQL_BEFORE_DROP_PRIMARY_KEY存储过程的SQL代码块 - 将原代码中涉及
@SQL_EXP的部分替换为EXECUTE IMMEDIATE(MySQL 8.0原生支持),替换后的代码片段如下:-- 替换原来的SET @SQL_EXP、PREPARE、EXECUTE、DEALLOCATE块 EXECUTE IMMEDIATE SQL_EXP; - 保存文件后,再次执行
dotnet ef database update命令
内容的提问来源于stack exchange,提问作者Think_Twice
相关产品推荐
相关产品推荐

