如何将连接字符串传递给 EF6 中的 DataContext

How to pass connection string to DataContext in EF6

我有一个 ASP.NET MVC 5 网络应用程序并且有以下代码:

public HAZID_DataContext() : base("HAZIDDEV")
{
    System.Data.Entity.SqlServer.SqlProviderServices.UseScopeIdentity = false;
}

我希望能够根据我的工作环境设置HAZIDDEV

例如在网络配置中我们有以下内容

  <connectionStrings>
    <add name="HAZIDTEST" connectionString="Server=DTISQLVS02\DEVELOPMENT;Database=HAZID;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
    <add name="HAZIDDEV" connectionString="Server=DTIDEV27;Database=HAZIDDEV;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

并希望在网络配置中有一个像这样的变量

<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

<add key="DefaultCulture" value="en" />
<add key="WorkEnvironment" value="Development"/>
<add key="PrefixDefaultCulture" value="false" />
<add key="SupportedCultures" value="en,fr" />
</appSettings>

所以我可以有一个 HAZIDDEVHAZIDTESTHAZIDPROD 连接字符串,如果我查看应用程序设置 WorkEnvironment,它是 Development那么我将使用 HAZIDDEV 作为连接。

任何帮助或见解将不胜感激

如果您的 objective 要为不同的环境使用单独的连接字符串,那么您不应该将连接字符串变量分开。而是改变连接字符串的值。

将您的 DBContext 对象配置为如下所示:

public partial class HAZID_DataContext : DbContext
{
        public HAZID_DataContext()
        {
        }

        public HAZID_DataContext(DbContextOptions<HAZID_DataContext> options)
            : base(options)
        {
        }

        //Other codes goes here

}

然后在应用程序启动时注入连接字符串:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<HAZID_DataContext>(opts =>
 opts.UseSqlServer(Configuration.GetConnectionString("HAZIDDEV")));
    
    ...
}

然后在 MVC Core 的 appsettings.json 文件中:

{
  "ConnectionStrings": {
    "HAZIDDEV": "Data Source=.\SQLEXPRESS2012;Initial Catalog=dbname;Persist Security Info=True;User ID=abc;Password=abc"
  }
}

或以这种方式从 web.config 或其他配置文件中读取:

ConfigurationManager.ConnectionStrings["HAZIDDEV"].ConnectionString;

只需根据环境更改连接字符串的值。或者根据需要有多个连接字符串。