I've configured connection strings in Azure management portal Configure->Connection Strings (linked resources):
What are these connection strings useful for?
I tried deleting the conn. strings from web.config file, so it should read from here, but it doesn't.
Is there any other way?
Basically I want these connection strings to override the connection strings in web.config to be used in production environment.
I've added the following to the Application_Start
method:
var sb = new StringBuilder();
var appConfig = ConfigurationManager.OpenMachineConfiguration();
foreach (ConnectionStringSettings conStr in appConfig.ConnectionStrings.ConnectionStrings)
sb.AppendFormat("Name: {0}, ConnectionString: {1}\n", conStr.Name, conStr.ConnectionString);
throw new Exception(sb.ToString());
Here's the result:
Name: LocalSqlServer, ConnectionString: data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
I tried the above with ConfigurationManager.ConnectionStrings
as well and the server (Azure) connection strings were not there.
在门户网站中连接字符串,您可以覆盖在web.config中定义的连接字符串。
当你在本地开发时,你可能会使用位于本地主机\的SQLExpress或类似的数据库。 如果部署,而不必设立的web.config转型这将意味着,在Windows Azure上运行你的网站仍然将指向到localhost \的SQLExpress,这是不是你想要的东西。
在门户网站中连接字符串 ,您可以覆盖这是在web.config中已经定义的现有连接字符串 。 如果你的web.config不包含具有相同的名称作为一个在门户中配置一个连接字符串,它不会被添加在运行时访问。 这可能是你所遇到的问题。
为了解决这个问题,只需一个连接字符串添加到您的web.config文件具有相同的名称,你已经加入到门户网站之一。
更新:就像我已经在评论解释中,Windows Azure网站实际上并不修改web.config( 源 ),它这样做在运行时。 因此,为了检查哪些的AppSettings和的ConnectionStrings实际上是在运行时可用,试试这个:
控制器:
public ActionResult Index()
{
ViewBag.ConnectionStrings =
ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
ViewBag.AppSettings = ConfigurationManager.AppSettings;
return View();
}
视图:
<h3>ConnectionStrings:</h3>
<ul>
@foreach (var setting in ViewBag.ConnectionStrings)
{
<li>@setting.Name: @setting.ConnectionString</li>
}
</ul>
<h3>AppSettings:</h3>
<ul>
@foreach (var s in ViewBag.AppSettings)
{
<li>@setting: @System.Configuration.ConfigurationManager.AppSettings[s]</li>
}
</ul>
两天后,我终于设法得到它的工作。 我将我的解决方案在这里希望它可以帮助别人的未来。
环境
- Azure的API APP(但在理论上,它应该用于其他类型的项目工作太)
- SQL数据库(托管在Azure上)。 它可以是任何明显分贝
- EF 6.0 - 数据库第一种方法
- >连接字符串部分 - 连接字符串应用程序设置下存储在天青。 下面示出图像
我想做的事 ,我想放在Azure和像@Sandrino迪马蒂亚提到我的连接字符串,动态地从那里获取它。
这为我工作的步骤
- 创建在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的生成连接字符串。 它的安全删除,因为我们没有使用。
转到天青 - >您的项目和应用程序设置。 添加详细信息如下所示:
NAME = 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;'
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;'
前第三下拉列表中,选择自定义。 这一点很重要别的天青将增加System.Data.SqlClient的(或取决于选择什么任何其他供应商)在我们的连接字符串,这是我们不希望的供应商名称。
- 保存
在这个阶段,天青应使用在运行时,这个连接字符串。 要验证!? 做类似于以上建议由@Sandrino迪马蒂亚或在此通过@Shaun Luttin SO发布检索链接到Windows Azure的Web站点使用C#.NET的SQL Azure数据库的连接字符串 。
或者,把下面的代码在任何剃刀模板:
<p>Value of dbConnectionStringForAzure :
@System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString
</p>
在另一方面,我已在我的DbContext构造连接字符串名称。
public MyEntities() : base("name=dbConnectionStringForAzure")
{
}
现在,当我打了一个电话给我的API它动态地使用存储在Azure中的连接。
多亏了几十个职位和咖啡额外的镜头!