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

.NET 6使用EF Core更新Azure MySQL数据库时连接失败

问题:Azure MySQL数据库通过SSMS可连接,但dotnet ef database update执行失败

现象

能通过SSMS正常连接Azure MySQL数据库,但执行dotnet ef database update命令时抛出连接错误,错误信息如下:

Entity Framework Core 6.0.15 initialized 'ApplicationDbContext' using provider 'MySql.EntityFrameworkCore:6.0.10+MySQL8.0.32' with options: None
MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
 ---> System.Net.Sockets.SocketException (10051): Próba przeprowadzenia operacji, wykonywanej przez gniazdo, na nieosiągalnej sieci.
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
--- End of stack trace from previous location ---
   at System.Net.Sockets.TcpClient.CompleteConnectAsync(Task task)
   at MySql.Data.MySqlClient.NativeDriver.<>c.<Open>b__40_0(Exception ex)
   at System.AggregateException.Handle(Func`2 predicate)
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.Driver.Open()
   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
   at MySql.Data.Failover.FailoverManager.AttemptConnection(MySqlConnection connection, String originalConnectionString, String& connectionString, Boolean mySqlPoolManager)
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at MySql.EntityFrameworkCore.Storage.Internal.MySQLDatabaseCreator.<>c__DisplayClass16_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at MySql.EntityFrameworkCore.Storage.Internal.MySQLExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 operation, Func`2 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 operation)
   at MySql.EntityFrameworkCore.Storage.Internal.MySQLDatabaseCreator.Exists(Boolean retryOnNotExists)
   at MySql.EntityFrameworkCore.Storage.Internal.MySQLDatabaseCreator.Exists()
   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)
Unable to connect to any of the specified MySQL hosts.

配置信息

连接字符串

"con": "Data Source=tcp:amcia.database.windows.net,1433;Initial Catalog=amcia;User ID=gryTerAdmin@amcia;Password=<password>;Connection Timeout=30;" 

Program.cs数据库配置代码

builder.Services.AddDbContext<ApplicationDbContext>((serviceProvider, options) =>
{
    IConfiguration configuration = serviceProvider.GetService<IConfiguration>();
    string connectionString = configuration.GetConnectionString("con");
    options.UseMySQL(connectionString, mySqlOptions => { });
});

已排查操作

  • 关闭本地防火墙
  • 将本机IP添加至Azure MySQL防火墙白名单
  • 环境:.NET 6.0,依赖Pomelo.EntityFrameworkCore 6.0.0-rc.2和EntityFrameworkCore 6.0.15

解决方案

1. 修正连接字符串端口

Azure MySQL默认端口为3306(1433是SQL Server默认端口),将连接字符串中的端口改为3306:

"con": "Data Source=tcp:amcia.database.windows.net,3306;Initial Catalog=amcia;User ID=gryTerAdmin@amcia;Password=<password>;Connection Timeout=30;" 

2. 统一EF Core与Pomelo版本

Pomelo.EntityFrameworkCore 6.0.0-rc.2为预发布版本,和正式版EntityFrameworkCore 6.0.15存在兼容性问题。将Pomelo包升级至.NET 6兼容的正式版(如6.0.2):

dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.2

3. 显式指定SSL模式

Azure MySQL强制要求SSL连接,可在连接字符串中明确配置:

"con": "Server=amcia.database.windows.net;Port=3306;Database=amcia;Uid=gryTerAdmin@amcia;Pwd=<password>;SslMode=Required;" 

4. 验证命令行环境配置读取

确保执行dotnet ef命令时处于项目根目录,且appsettings.json(或对应环境配置文件)中的连接字符串已正确更新,避免命令行工具读取到旧配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:29:57