VS2017在MacBook部署ASP.NET Core MVC执行dotnet ef更新数据库提示server关键字不支持
报错原因及解决方案
核心原因
- 你的EF Core注册时使用了与SQL Server不匹配的数据库提供程序,或跨平台环境下的System.Data.SqlClient包存在兼容性缺陷,具体可分为三类常见场景:
- DbContext注册时未指定
UseSqlServer()扩展方法,误调用了Sqlite、PostgreSQL等其他数据库的提供程序配置方法,这类提供程序的连接字符串不识别Server关键字 - 仍在使用.NET Framework时代的
System.Data.SqlClient包,该包在Mac/Linux跨平台环境下存在大量兼容性问题,对连接字符串关键字的解析逻辑和Windows环境不一致 - 写在
ConnectionStrings节点下的providerName是.NET Framework的旧配置规则,ASP.NET Core不会读取该配置自动匹配提供程序,无效配置可能干扰正常的配置读取逻辑
- DbContext注册时未指定
解决步骤
- 检查DbContext注册代码,确认使用SQL Server专属的配置方法,示例如下(.NET 6+ Program.cs写法):
builder.Services.AddDbContext<你的自定义DbContext类名>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
- 卸载项目中的
System.Data.SqlClient包,安装Microsoft.EntityFrameworkCore.SqlServer包,该包会自动引入适配跨平台场景的Microsoft.Data.SqlClient依赖,无需单独安装。 - 可尝试将连接字符串中的
Server关键字替换为等效的Data Source,部分跨平台版本的SqlClient对Server的识别存在缺陷,修改后的连接字符串示例:
"DefaultConnection": "Data Source=my_ip; Database=my_db; User Id=sa; Password=my_pass;"
- 确认EF Core工具版本与项目依赖的EF Core包版本完全一致,版本不匹配会导致连接字符串解析异常,可通过
dotnet ef --version命令查看本地工具版本,与项目引用的Microsoft.EntityFrameworkCore包版本对比,统一即可。
内容的提问来源于stack exchange,提问作者Behzad Hassani
相关产品推荐
相关产品推荐

