我目前正在和Entity Framework
合作一个ASP.NET
MVC
项目。该解决方案包括ASP.NET
MVC
应用程序和一个DataProvider
项目。该项目只包括一个EF
模型,因为我有一个与我共享数据库的合作伙伴。
问题在于,我们实际上并不共享同一个数据库。我的意思是,数据库的实际服务器并不相同。我们有相同的桌子。但是,每次我们从git
存储库中提取数据时,连接字符串都必须更改。该字符串将在ASP.NET
MVC
项目的web.config
文件和EF
库的app.config
文件中更改。
我的问题是-我们的系统是否有办法检测它在哪个PC
上运行并动态修改连接字符串?现在我手动完成。
<!--PC NICO CEI-->
<!--
<connectionStrings>
<add name="dbShubertEntities"
connectionString="metadata=res://*/ModelDbShubert.csdl|res://*/ModelDbShubert.ssdl|res://*/ModelDbShubert.msl;provider=System.Data.SqlClient;provider connection string="data source=E04\SQLEXPRESS;initial catalog=dbShubert;user id=gereisma17;password=12321;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
-->
<!--PC NICO Laptop-->
<!--
<connectionStrings>
<add name="dbShubertEntities"
connectionString="metadata=res://*/ModelDbShubert.csdl|res://*/ModelDbShubert.ssdl|res://*/ModelDbShubert.msl;provider=System.Data.SqlClient;provider connection string="data source=DESKTOP-I62BLOC;initial catalog=dbShubert;user id=user;password=1234;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
-->
这就是我现在所做的。我正在注释连接字符串。我想让整个过程自动化。
发布于 2019-06-10 00:20:47
如果您使用的是aspnet核心,有一种方法可以将环境变量配置为应用程序设置的覆盖。这样,您将拥有一个包含所有常用设置的“默认”appsettings.json,然后在不同的计算机上,您可以配置环境变量,以不同的方式替换(覆盖)每台计算机的连接字符串
我认为对于整个框架的aspnet也可以采用类似的方法。
由于您的连接字符串已经有了一个非常具体的名称"dbShubertEntities“,因此覆盖它应该是非常有效的,并且您不应该冒着在处理不同项目的情况下发生连接字符串冲突的风险。
作为参考,请参阅使用.AddEnvironmentVariables()的部分的https://joonasw.net/view/asp-net-core-1-configuration-deep-dive
发布于 2019-06-10 00:25:45
您可以用动态连接字符串重载DbContext的构造函数
public class MasterDal : DbContext
{
public MasterDal(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
// DbSet & OnModelCreating etc
}
然后根据需要在控制器中调用dal
if (logicToGetPc.equal("CEI"))
{
MasterDal dal = new MasterDal("dbShubertEntitiesCEI");
// do mumbai related whatever
}
else if (logicToGetPc.equal("Laptop"))
{
MasterDal dal = new MasterDal("dbShubertEntitiesCEILaptop");
}
发布于 2019-06-10 00:10:18
将连接字符串作为环境变量存储在每台PC上。
创建到数据库的连接时,请改用Environment.GetEnvironmentVariable方法检索连接字符串。
https://stackoverflow.com/questions/56516163
复制相似问题