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

Mac M1上ASP.NET Core+EF Core无法连接AWS MySQL数据库

解决ASP.NET Core+EF Core连接AWS MySQL数据库失败问题

环境信息

  • MacOS 14.7 (Sonoma) Arm64
  • .NET SDK 8.0.303
  • 当前使用EF Core包:Microsoft.EntityFrameworkCore.SqlServer 8.0.8

问题描述

搭建Unity游戏后端时,已完成EF Core初始迁移配置,AWS RDS MySQL数据库可通过MySQL Workbench正常连接,但执行dotnet ef database update时抛出错误:

建立与SQL Server的连接时发生网络相关或特定于实例的错误。找不到服务器或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(provider: TCP Provider, error: 35 - 捕获到内部异常)

关键调用栈片段:

---> System.Net.Sockets.SocketException (00000005, 0xFFFDFFFF): nodename nor servname provided, or not known
   at System.Net.Dns.GetHostEntryOrAddressesCore(String hostName, Boolean justAddresses, AddressFamily addressFamily, Nullable`1 startingTimestamp)
   at System.Net.Dns.GetHostAddresses(String hostNameOrAddress, AddressFamily family)
   at Microsoft.Data.SqlClient.SNI.SNICommon.GetDnsIpAddresses(String serverName)
   at Microsoft.Data.SqlClient.SNI.SNITCPHandle.Connect(String serverName, Int32 port, TimeSpan timeout, Boolean isInfiniteTimeout, SqlConnectionIPAddressPreference ipPreference, String cachedFQDN, SQLDNSInfo& pendingDNSInfo)
   ...

当前appsettings.json中的连接字符串:

"GameDb-1":"Server=MyEndpoint.cheyadf0khl8.eu-central-1.rds.amazonaws.com:3306; Database=game_db;User=myUser,Password=myPassword;"

解决方案

1. 替换EF Core数据库提供程序

当前使用的Microsoft.EntityFrameworkCore.SqlServer是SQL Server专用驱动,无法连接MySQL。执行以下命令替换为MySQL官方EF Core驱动:

dotnet remove package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package MySql.EntityFrameworkCore --version 8.0.33

(版本号需与.NET SDK 8.x匹配,避免兼容性问题)

2. 修正DbContext配置

在Program.cs中,将原来的UseSqlServer替换为UseMySQL:

// 错误写法(针对SQL Server)
builder.Services.AddDbContext<GameDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("GameDb-1")));

// 正确写法(针对MySQL)
builder.Services.AddDbContext<GameDbContext>(options =>
    options.UseMySQL(builder.Configuration.GetConnectionString("GameDb-1")));

3. 修正连接字符串格式

原连接字符串存在两个错误:

  • User与Password之间用逗号分隔,需改为分号
  • MySQL规范写法使用Uid/Pwd代替User/Password(部分驱动兼容旧写法,但规范写法更可靠)

修正后的连接字符串:

"GameDb-1":"Server=MyEndpoint.cheyadf0khl8.eu-central-1.rds.amazonaws.com;Port=3306;Database=game_db;Uid=myUser;Pwd=myPassword;"

4. 重新执行迁移操作

若之前的迁移文件是基于SQL Server驱动生成的,需删除旧迁移文件后重新生成:

# 删除旧迁移目录(按需执行)
rm -rf Migrations/
# 生成新的初始迁移
dotnet ef migrations add InitialCreate
# 更新数据库
dotnet ef database update

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:20