ASP.NET新手执行update-database遇SNI_PN11错误(M1 Ultra+Parallels环境)
我是ASP.NET和SQL的新手,正在学习相关技术。使用Entity Framework执行update-database命令创建数据库时,出现如下错误:
建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(provider: SNI_PN11, error: 56 - 无法从注册表指定的位置加载SQLUserInstance.dll。请验证SQL Server Express的Local Database Runtime功能是否已正确安装。)
我的连接字符串如下:
"ConnectionStrings": {
"BethanysPieShopDbContextConnection": "Server=(localdb)\mssqllocaldb;Database=BethanysPieShop8854;Trusted_Connection=True;MultipleActiveResultSets=true"
}
我在搭载M1 Ultra芯片的Mac上通过Parallels运行Windows系统,不确定是操作失误还是Arm64架构导致了该问题,想了解是否有其他苹果硅用户遇到过类似情况。
检查并安装适配Arm64的LocalDB
打开Windows「设置」-「应用」-「应用和功能」,搜索SQL Server Express LocalDB。如果未安装,下载微软官方的Arm64版本LocalDB安装包进行安装;如果已安装的是x64版本,卸载后重装Arm64版本——M1 Ultra属于Arm架构,Parallels的Windows如果是Arm版,x64的LocalDB会出现组件加载故障。重建LocalDB实例
以管理员身份打开命令提示符,依次执行以下命令重置默认实例:sqllocaldb stop mssqllocaldb sqllocaldb delete mssqllocaldb sqllocaldb create mssqllocaldb sqllocaldb start mssqllocaldb完成后重新运行
update-database命令尝试。修改连接字符串的实例名称
部分Arm64环境下LocalDB的默认实例名称可能有差异,先执行sqllocaldb info命令查看当前存在的实例列表,然后将连接字符串中的Server=(localdb)\mssqllocaldb替换为实际存在的实例名称,比如Server=(localdb)\ProjectsV13。开启Parallels嵌套虚拟化
打开Parallels Desktop,进入虚拟机的「设置」-「硬件」-「CPU与内存」,勾选「嵌套虚拟化」选项,这能提升SQL Server相关组件的兼容性。关于苹果硅用户的类似情况
不少M系列芯片用户在Parallels+Windows Arm环境下遇到过LocalDB的加载问题,大多是因为架构适配或实例损坏导致,通过上述重装适配版本、重建实例的方法基本能解决。
内容的提问来源于stack exchange,提问作者Jonathan

