如何将连接字符串传递给 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>
所以我可以有一个 HAZIDDEV
、HAZIDTEST
和 HAZIDPROD
连接字符串,如果我查看应用程序设置 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;
只需根据环境更改连接字符串的值。或者根据需要有多个连接字符串。
我有一个 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>
所以我可以有一个 HAZIDDEV
、HAZIDTEST
和 HAZIDPROD
连接字符串,如果我查看应用程序设置 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;
只需根据环境更改连接字符串的值。或者根据需要有多个连接字符串。