经过两天的努力,我终于成功了。我在这里分享我的解决方案,希望对未来的某个人有所帮助。
环境
- Azure API APP(但理论上,它也适用于其他类型的项目)
- SQL DB(托管在Azure上)。它可以是任何数据库
- EF 6.0 - 数据库优先方法
- 连接字符串存储在Azure下的应用程序设置 ->连接字符串部分。如下图所示:
![从Azure -> Api App -> Application Settings-> Connection Strings中获取快照](https://istack.dev59.com/i1h8n.webp)
我想做什么
我想将我的连接字符串放在Azure上,并像@Sandrino Di Mattia提到的那样,从那里动态检索它。
对我有用的步骤
- 在web.config文件中创建一个connectionStrings
`
<connectionStrings>
<add name="dbConnectionStringForAzure" connectionString="Local Connection String" providerName="System.Data.EntityClient"/>
</connectionStrings>
请注意,providerName 是 System.Data.EntityClient 而不是 System.Data.SqlClient。
附加信息:发布项目后,您可以验证 web.config 中的连接字符串。导航到 projectorapiurl.scm.azurewebsites.net。
转到菜单 -> 调试控制台 -> PowerShell -> 编辑 Web.config 文件。(还有其他获取 web.config 文件的方法。使用您喜欢的一种。)
请注意:在这里,您可能会发现 Azure 生成了另一个连接字符串。我们不使用它,安全删除即可。
2. 转到 Azure -> 您的项目和应用程序设置。添加以下详细信息:
名称 = dbConnectionStringForAzure
值 = Provider=System.Data.SqlClient; metadata=res://*/csdlModel.csdl|res://*/ssdlModel.ssdl|res://*/mslModel.msl; Provider Connection String ='Data Source=server.database.windows.net,1433;initial catalog=database;User ID=username;Password=password;MultipleActiveResultSets=True;App=EntityFramework;'
从第三个下拉列表中选择自定义。这很重要,否则 Azure 将在连接字符串的提供程序名称中添加 System.Data.SqlClient(或任何其他提供程序,具体取决于所选内容),而我们不需要。
保存
在此阶段,Azure 应在运行时使用此连接字符串。想要验证吗?像 @Sandrino Di Mattia 建议的那样执行类似操作,或者参考 @Shaun Luttin 在此 SO 帖子中的做法
(使用 C#.NET 检索链接到 Windows Azure Web Site 的 SQL Azure 数据库的连接字符串)。
或者,在任何 Razor 模板中放置以下代码:
<p>Value of dbConnectionStringForAzure :
@System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString
</p>
另一方面,我已经在我的DbContext构造函数中设置了连接字符串名称。
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}
现在,当我调用我的API时,它会动态地使用存储在Azure中的连接。
感谢数十篇帖子和额外的咖啡提神!