动态更改connString

时间:2019-06-09 16:01:08

标签: c# sql

我目前正在使用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=&quot;data source=E04\SQLEXPRESS;initial catalog=dbShubert;user id=gereisma17;password=12321;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         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=&quot;data source=DESKTOP-I62BLOC;initial catalog=dbShubert;user id=user;password=1234;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
</connectionStrings>
-->

这就是我现在要做的。我正在评论连接字符串。我想使整个过程自动化。

4 个答案:

答案 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(或它的对应文件)制作的。

当我意识到您的困境时(您在写作中需要更多的空格以使其更易于阅读),您基本上是在两种不同的环境中工作(类似于开发与测试)。简单的配置更改将是最简单的方法。

顺便说一句: 在两行之间阅读时,似乎您在对连接字符串进行硬编码,并且我为您提供了两个单词的建议:停止! (我曾经这样做过,这是一个很难摆脱的坏习惯)