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
相关产品推荐
相关产品推荐

