You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:40:57