C# AspNet Mvc自动选择连接字符串

C# AspNet Mvc自动选择连接字符串,c#,asp.net-mvc,database,C#,Asp.net Mvc,Database,我已经在一个项目上工作了一段时间,这个项目的生产版本运行在一个共享的托管环境中,另一个运行在我的开发机器上。 这里的问题是,每次我想在我的开发机器上运行应用程序时,我都必须修改连接字符串设置,以指向开发机器上的localDb,反之亦然。 这对我来说太不方便了,直到我想出了这个解决方案,它至少工作得很好。 我的问题是,我的解决方案在Aspnet环境中专业可靠吗?或者是否有一种最佳且经验证的方法可以更好地实现此解决方案?非常感谢。有关详细信息,请参见代码 //Created a static met

我已经在一个项目上工作了一段时间,这个项目的生产版本运行在一个共享的托管环境中,另一个运行在我的开发机器上。 这里的问题是,每次我想在我的开发机器上运行应用程序时,我都必须修改连接字符串设置,以指向开发机器上的localDb,反之亦然。 这对我来说太不方便了,直到我想出了这个解决方案,它至少工作得很好。 我的问题是,我的解决方案在Aspnet环境中专业可靠吗?或者是否有一种最佳且经验证的方法可以更好地实现此解决方案?非常感谢。有关详细信息,请参见代码

//Created a static method in Global.asax.cs     

/// <summary>
   /// Returns Connection settings based on the machine. i.e, automatically select connection strings if it's development or live server
   /// </summary>
   /// <param name="ArrayIndex"></param>
   /// <returns> string BaseConn = (connectionstring name) </returns>

public  static string

     Settings( int ArrayIndex)
    {


        string[] BaseConn ={ HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[4].Name :
         System.Configuration.ConfigurationManager.ConnectionStrings[1].Name,

//Identity database connections

         HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[5].Name :
         System.Configuration.ConfigurationManager.ConnectionStrings[2].Name,

//store database connection

         HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[6].Name :
         System.Configuration.ConfigurationManager.ConnectionStrings[3].Name,
                              };
        return BaseConn[ArrayIndex];
    }
我对store DbContext和Identity DbContext也做了同样的操作。
无论是在本地还是在现场机器上,一切似乎都运转良好。尽管我无法使用codefirst迁移使用此解决方案更新数据库。至少现在不是问题

您需要使用Web.Release.Config

在Web.config中,您将指定自己的(本地)连接字符串,在发布时,您将使用类似的内容(根据您自己的sql连接更改配置)


确保name属性在这两个字段中都匹配。在本例中,它是:name=“MyContext”


注意:请确保在发布时,它将以发布模式运行。

您需要使用Web.RELEASE.Config

在Web.config中,您将指定自己的(本地)连接字符串,在发布时,您将使用类似的内容(根据您自己的sql连接更改配置)


确保name属性在这两个字段中都匹配。在本例中,它是:name=“MyContext”


注意:请确保在发布时,它将以发布模式运行。

您需要使用Web.RELEASE.Config

在Web.config中,您将指定自己的(本地)连接字符串,在发布时,您将使用类似的内容(根据您自己的sql连接更改配置)


确保name属性在这两个字段中都匹配。在本例中,它是:name=“MyContext”


注意:请确保在发布时,它将以发布模式运行。

您需要使用Web.RELEASE.Config

在Web.config中,您将指定自己的(本地)连接字符串,在发布时,您将使用类似的内容(根据您自己的sql连接更改配置)


确保name属性在这两个字段中都匹配。在本例中,它是:name=“MyContext”


注意:请确保在发布时,它是以发布模式进行的。

您最好使用Web.Config转换

其思想是,在部署时,您选择目标环境,配置文件将根据
Web.{configuration\u NAME}.config
文件中描述的更改自动转换

例如,要更改
Release
配置的连接字符串,您需要在
Web.Release.config
文件中使用它:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDB" 
      connectionString="{SQL_SERVER_CONNECTION_STRING_FOR_RELEASE}" 
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>


您最好使用Web.Config转换

其思想是,在部署时,您选择目标环境,配置文件将根据
Web.{configuration\u NAME}.config
文件中描述的更改自动转换

例如,要更改
Release
配置的连接字符串,您需要在
Web.Release.config
文件中使用它:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDB" 
      connectionString="{SQL_SERVER_CONNECTION_STRING_FOR_RELEASE}" 
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>


您最好使用Web.Config转换

其思想是,在部署时,您选择目标环境,配置文件将根据
Web.{configuration\u NAME}.config
文件中描述的更改自动转换

例如,要更改
Release
配置的连接字符串,您需要在
Web.Release.config
文件中使用它:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDB" 
      connectionString="{SQL_SERVER_CONNECTION_STRING_FOR_RELEASE}" 
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>


您最好使用Web.Config转换

其思想是,在部署时,您选择目标环境,配置文件将根据
Web.{configuration\u NAME}.config
文件中描述的更改自动转换

例如,要更改
Release
配置的连接字符串,您需要在
Web.Release.config
文件中使用它:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDB" 
      connectionString="{SQL_SERVER_CONNECTION_STRING_FOR_RELEASE}" 
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>

因此,当有人忘记(而且有人会忘记)设置“发布”或“调试”模式时,您的系统将错误地命中开发数据或生产数据,这似乎是灾难的原因……对我来说,这似乎不是防故障的。必须有一种方法将其编码到应用程序中。例如,您可以编写代码,以便您的应用程序确定它在哪个服务器上运行,如果是生产服务器,则使用生产连接字符串……如果是测试服务器,则使用测试连接字符串,否则使用开发连接字符串。

因此,当有人忘记(也有人愿意)设置“发布”或“调试”时模式您的系统将错误地命中开发数据或生产数据,这似乎是一个灾难的配方……对我来说,这似乎不是防故障的。必须有一种方法将其编码到应用程序中。例如,您可以编写代码,以便您的应用程序确定它在哪个服务器上运行,如果是生产服务器,则使用生产连接字符串……如果是测试服务器,则使用测试连接字符串,否则使用开发连接字符串。

因此,当有人忘记(也有人愿意)设置“发布”或“调试”时模式您的系统将错误地命中开发数据或生产数据,这似乎是一个配方f