ASP.NET MVC5部署Azure后数据库连接报错:不支持'server'关键字
解决ASP.NET MVC5 + EDMX部署Azure时的"server keyword is not supported"异常
这个问题我之前帮朋友排查过,核心原因是你用错了连接字符串的格式——EDMX数据库优先模式下,Entity Framework需要的是EntityClient类型的连接字符串,而Azure门户给你的是直接给SQL Server用的SqlClient连接字符串,直接替换肯定会报错。
问题拆解
EntityClient的连接字符串结构和普通SQL连接字符串不一样,它包含三个关键部分:
- 指向EDMX元数据的
metadata路径(.csdl/.ssdl/.msl文件) - 指定数据提供者的
provider(这里是System.Data.SqlClient) - 嵌套在里面的实际SQL Server连接字符串(就是Azure给你的那串)
你现在的配置是把Azure的SqlClient字符串直接塞给了EntityClient的provider,它自然识别不了server这种SqlClient的关键字。
正确的配置方法
你需要把Azure的连接字符串嵌套到EntityClient格式里,示例如下:
<connectionStrings> <add name="NiqaatyEntities" connectionString="metadata=res://*/Models.NiqaatyModel.csdl|res://*/Models.NiqaatyModel.ssdl|res://*/Models.NiqaatyModel.msl;provider=System.Data.SqlClient;provider connection string="Server=tcp:ServerName.database.windows.net,1433;Initial Catalog=DatabaseName;Persist Security Info=False;User ID=Login;Password=Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"" providerName="System.Data.EntityClient"/> </connectionStrings>
注意几个细节:
metadata路径要和你的EDMX文件匹配:如果你的EDMX在Models文件夹下,文件名是NiqaatyModel.edmx,那上面的路径就没问题;如果路径不同,要对应修改。- 嵌套的SQL连接字符串要用
"转义双引号(因为XML属性里不能直接嵌套双引号)。 - 替换
ServerName、DatabaseName、Login、Password为你从Azure门户拿到的实际值。
更省心的办法(推荐)
如果你怕手动写错,可以直接用Visual Studio自动生成:
- 打开你的EDMX设计器界面
- 右键空白处,选择「更新模型从数据库」
- 在连接对话框里,选择「新建连接」,然后输入Azure SQL的连接信息(或者直接导入Azure门户的连接字符串)
- 完成后,VS会自动帮你生成正确的
EntityClient连接字符串到web.config里
额外检查点
- 确保Azure SQL数据库的防火墙规则允许Azure服务访问(在Azure门户的SQL服务器→防火墙设置里,开启「允许Azure服务和资源访问此服务器」)
- 本地测试时,也要把你的IP加入防火墙规则,避免连接失败
内容的提问来源于stack exchange,提问作者askm
相关产品推荐
相关产品推荐

