我目前正在使用ASP.NET
从事MVC
Entity Framework
项目。该解决方案包括ASP.NET
MVC
应用程序和一个DataProvider
项目。该项目仅包含EF
模型,因为我有一个与我共享数据库的合作伙伴。
问题在于,我们实际上没有共享同一数据库。我的意思是,数据库的实际服务器并不相同。我们有相同的表。但是,每次我们从git
存储库中提取时,都必须更改连接字符串。字符串在web.config
ASP.NET
项目的MVC
文件和app.config
库的EF
文件中更改。
我的问题是-我们的系统是否可以检测正在运行的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>
-->
这就是我现在要做的。我正在评论连接字符串。我想使整个过程自动化。
答案 0 :(得分:2)
您可以使用动态连接字符串重载DbContext的构造函数
public class MasterDal : DbContext
{
public MasterDal(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
// DbSet & OnModelCreating etc
}
&然后根据需要在Controller中调用dal
if (logicToGetPc.equal("CEI"))
{
MasterDal dal = new MasterDal("dbShubertEntitiesCEI");
// do mumbai related whatever
}
else if (logicToGetPc.equal("Laptop"))
{
MasterDal dal = new MasterDal("dbShubertEntitiesCEILaptop");
}
答案 1 :(得分:1)
将连接字符串作为环境变量存储在每台PC上。
创建与数据库的连接时,请改用Environment.GetEnvironmentVariable方法检索连接字符串。
答案 2 :(得分:1)
如果您使用的是ASPNET Core,则可以使用一种方法将环境变量配置为应用程序设置的替代 这样,您将拥有一个“ default” appsettings.json,其中包含所有常用设置,然后在另一台计算机上,您可以配置environmnet变量,该变量以不同的方式为每台计算机替换(覆盖)连接字符串
我认为对于整个框架而言,aspnet也可以采用类似的方法
由于您的连接字符串已经有一个非常特定的名称“ dbShubertEntities”,因此重写它非常有效,并且如果您在不同的项目上工作,也不必冒险遇到连接字符串冲突的情况。
作为参考,请参见https://joonasw.net/view/asp-net-core-1-configuration-deep-dive它使用.AddEnvironmentVariables()的部分
答案 3 :(得分:0)
(在撰写本文时,没有代码)
这是为appsettings.json(或它的对应文件)制作的。
当我意识到您的困境时(您在写作中需要更多的空格以使其更易于阅读),您基本上是在两种不同的环境中工作(类似于开发与测试)。简单的配置更改将是最简单的方法。
顺便说一句: 在两行之间阅读时,似乎您在对连接字符串进行硬编码,并且我为您提供了两个单词的建议:停止! (我曾经这样做过,这是一个很难摆脱的坏习惯)