两天后,我终于设法让它工作了。我在这里添加我的解决方案,希望它将来可能对某人有所帮助。
环境
- Azure API APP(但理论上,它也应该适用于其他类型的项目)
- SQL DB(托管在 Azure 上)。显然可以是任何数据库
- EF 6.0 - 数据库优先方法
- 连接字符串存储在 Azure 上的应用程序设置 -> 连接字符串部分。如下图所示
我想做的是
我想把我的连接字符串放在 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 自动生成的连接字符串。删除它是安全的,因为我们没有使用它。
转到 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;'
在第三个下拉列表前面,选择 CUSTOM。重要的是,Azure 将在我们不想要的连接字符串的提供程序名称中添加 System.Data.SqlClient(或任何其他提供程序,具体取决于所选内容)。
- 节省
在这个阶段,Azure 应该在运行时使用这个连接字符串。想要验证!?执行类似于@Sandrino Di Mattia 上面的建议或@Shaun Luttin 在此 SO 帖子中的建议检索 SQL Azure 数据库的连接字符串,该数据库使用 C#.NET 链接到 Windows Azure 网站。
或者,将以下代码放入任何剃须刀模板中:
<p>Value of dbConnectionStringForAzure :
@System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString
</p>
另一方面,我在 DbContext 构造函数中设置了连接字符串名称。
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}
现在,当我调用我的 API 时,它会动态使用存储在 Azure 中的连接。
感谢几十个帖子和额外的咖啡!