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

EF连接MySQL执行Update-Database遇瞬态错误,求解决方案

问题分析与解决方案

你的核心问题是用了SQL Server的Entity Framework组件去连接MySQL数据库,这是组件与数据库类型完全不匹配导致的。Add-Migration能成功是因为迁移仅生成代码逻辑,不需要实际连接数据库;而Update-Database需要建立真实数据库连接,因此触发错误。

具体修复步骤:

  1. 卸载错误的NuGet包
    在NuGet包管理器中卸载 Microsoft.EntityFrameworkCore.SqlServer(仅保留Microsoft.EntityFrameworkCore.Tools即可)

  2. 安装MySQL对应的EF Core Provider
    安装社区维护的MySQL EF Core驱动(目前最常用的是Pomelo):

    Install-Package Pomelo.EntityFrameworkCore.MySql -Version [你的EF Core版本号]
    

    注意:版本号必须和你项目中Microsoft.EntityFrameworkCore的版本完全一致(比如EF Core 7.0.x就装7.0.x版本的Pomelo包)

  3. 修正连接字符串
    MySQL不支持Trusted_connection参数,调整AppSettings.json中的连接字符串:

    "ConnectionStrings": {
      "MvcDemoConnectionString": "server=localhost;port=3306;user=root;password=123456;database=MVCDemoDb;sslmode=None"
    }
    
    • 移除Trusted_connection=true
    • 添加sslmode=None(本地测试环境可关闭SSL,避免连接异常)
    • 统一去掉参数间的空格(可选,让格式更规范)
  4. 修改DbContext配置代码
    将UseSqlServer替换为UseMySql,并指定MySQL服务器版本:

    builder.Services.AddDbContext<MVCDemoDbContext>(options => 
        options.UseMySql(
            builder.Configuration.GetConnectionString("MvcDemoConnectionString"),
            ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("MvcDemoConnectionString")),
            opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(10).TotalSeconds)
        )
    );
    

    如果你明确知道MySQL版本(比如8.0),也可以直接写ServerVersion.MySql80代替ServerVersion.AutoDetect,性能更优。

  5. 重新执行迁移操作
    由于之前的迁移是基于SQL Server生成的,建议清理后重新生成:

    • 删除项目中的Migrations文件夹
    • 执行命令:Add-Migration "InitialMigration"
    • 执行命令:Update-Database

额外检查项:

  • 确认本地MySQL服务已启动(可通过服务管理器或命令net start mysql检查)
  • 确认MySQL端口确实是3306(若修改过需同步调整连接字符串)
  • 确认root用户密码正确,且拥有创建数据库的权限

内容的提问来源于stack exchange,提问作者Anam Mofazzal Durjoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:13:23