C# 检索并使用Windows Azure';什么是连接字符串?

C# 检索并使用Windows Azure';什么是连接字符串?,c#,azure,web-config,connection-string,C#,Azure,Web Config,Connection String,我已在Azure管理门户配置->连接字符串(链接资源)中配置了连接字符串: 这些连接字符串的用途是什么 我尝试从web.config文件中删除conn.strings,因此它应该从这里读取,但没有 还有别的办法吗 基本上,我希望这些连接字符串覆盖web.config中要在生产环境中使用的连接字符串 我已将以下内容添加到应用程序\u Start方法中: var sb = new StringBuilder(); var appConfig = ConfigurationManager.OpenM

我已在Azure管理门户配置->连接字符串(链接资源)中配置了连接字符串:

这些连接字符串的用途是什么

我尝试从web.config文件中删除conn.strings,因此它应该从这里读取,但没有

还有别的办法吗

基本上,我希望这些连接字符串覆盖web.config中要在生产环境中使用的连接字符串

我已将以下内容添加到
应用程序\u Start
方法中:

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());
结果如下:

名称:LocalSqlServer,连接字符串:数据源=。\SQLEXPRESS;综合安全=SSPI;AttachDBFilename=|数据目录| aspnetdb.mdf;用户实例=true


我使用
ConfigurationManager尝试了上述操作。ConnectionString
也不存在服务器(Azure)连接字符串。

门户中的连接字符串允许您覆盖web.config中定义的连接字符串

在本地开发时,可能会使用位于localhost\SQLExpress或类似位置的数据库。如果您在未设置web.config转换的情况下进行部署,则意味着您在Windows Azure中运行的网站仍将指向localhost\SQLExpress,这不是您想要的

门户中的连接字符串允许您覆盖web.config中已定义的现有连接字符串。如果web.config不包含与门户中配置的名称相同的连接字符串,则不会添加该字符串,并且在运行时可以访问该字符串。这可能是您遇到的问题

要解决此问题,只需在web.config文件中添加一个与已添加到门户的名称相同的连接字符串即可

更新:就像我在评论中已经解释的那样,Windows Azure网站不会实际修改Web.config(),而是在运行时进行修改。因此,为了检查哪些AppSettings和ConnectionString在运行时实际可用,请尝试以下操作:

控制器:

public ActionResult Index()
{
  ViewBag.ConnectionStrings =
    ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
  ViewBag.AppSettings = ConfigurationManager.AppSettings;
  return View();
}
public ActionResult Index()
{
ViewBag.ConnectionString=
ConfigurationManager.ConnectionString.Cast();
ViewBag.AppSettings=ConfigurationManager.AppSettings;
返回视图();
}
视图:

<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>
连接字符串:
    @foreach(ViewBag.ConnectionString中的变量设置) {
  • @setting.Name:@setting.ConnectionString
  • }
应用程序设置:
    @foreach(ViewBag.AppSettings中的变量s) {
  • @设置:@System.Configuration.ConfigurationManager.AppSettings[s]
  • }

两天后,我终于让它开始工作了。我在这里添加了我的解决方案,希望它能在将来帮助别人

环境

  • Azure API应用程序(但理论上,它也适用于其他类型的项目)
  • SQL数据库(托管在Azure上)。很明显,它可以是任何db
  • EF 6.0-数据库优先方法
  • 连接字符串存储在Azure上的应用程序设置->连接字符串部分下。下图所示

我想做什么 我想把我的连接字符串放到Azure上,就像@Sandrino Di Mattia提到的那样,从那里动态地检索它

对我有效的步骤

  • 在web.config中创建连接字符串
  • `

    另一方面,我在DbContext构造函数中设置了连接字符串名称

            public MyEntities() : base("name=dbConnectionStringForAzure")
            {
    
            }
    
    现在,当我调用API时,它动态地使用了Azure中存储的连接


    多亏了几十篇帖子和额外的咖啡镜头

    不。所有被覆盖的连接都在web.config中,它们实际上没有被覆盖。请检查跟踪我并使我的生活陷入地狱的严重错误。覆盖web.config发生在运行时,Windows Azure网站不会实际修改web.config。我将更新我的答案。在
    应用程序启动时不起作用。我没有在视图/控制器中尝试它。检查我的最新问题。这让我抓狂。我使用FTP检查部署的web.config并查找开发连接字符串;不知道网站为什么使用生产连接字符串!谢谢你的解释!帮了大忙!但有一点是,该视图包含一个小小的ctrl-C ctrl-V错误,在appsettings部分@settings不存在,因此它应该看起来像:
  • @s:@System.Configuration.ConfigurationManager.appsettings[s]
  •     <p>Value of dbConnectionStringForAzure  :
        @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString    
        </p>
    
            public MyEntities() : base("name=dbConnectionStringForAzure")
            {
    
            }