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

执行Update-Database命令时MySqlConnection已释放错误求助

Update-Database 执行报错:Cannot access a disposed object. Object name: 'MySqlConnection'

使用ASP.NET 7.0 + MySQL环境,已安装MySqlConnector和Pomelo.EntityFrameworkCore.MySql依赖包,测试代码可正常从数据库获取数据,但在程序包管理器控制台执行Update-Database命令时,抛出以下错误:

fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
      An error occurred using the connection to database 'mydb' on server 'localhost'.
An error occurred using the connection to database 'mydb' on server 'localhost'.
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'MySqlConnection'.
   at MySqlConnector.MySqlConnection.VerifyNotDisposed() in /_/src/MySqlConnector/MySqlConnection.cs:line 1002
   at MySqlConnector.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlConnection.cs:line 388
   at MySqlConnector.MySqlConnection.Open() in /_/src/MySqlConnector/MySqlConnection.cs:line 382
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteScalar(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Cannot access a disposed object.
Object name: 'MySqlConnection'.

相关代码

Program.cs中的数据库配置:

using var connectionString = new MySqlConnection(builder.Configuration.GetConnectionString("DefaultConnection"));
var serverVersion = new MySqlServerVersion(new Version(8, 0, 31));


builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(connectionString, serverVersion));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();


builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

appsettings.json中的连接字符串:

"DefaultConnection": "server=localhost;port=3306;User ID=root;Password=password;Database=mydb"

解决方案

问题根源是using var声明的MySqlConnection会在代码块执行完毕后自动释放连接对象,而EF Core迁移工具运行时需要复用该连接,导致出现已释放对象的错误。

修改代码,直接传入连接字符串让EF Core自行管理连接生命周期:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
var serverVersion = new MySqlServerVersion(new Version(8, 0, 31));

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(connectionString, serverVersion));
// 其余代码保持不变

EF Core的UseMySql方法支持直接接收连接字符串,内部会根据需求创建、打开和释放连接,避免手动管理连接生命周期带来的资源释放问题。


内容的提问来源于stack exchange,提问作者unelectricpostrequest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:25:05