首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态更改connString

动态更改connString
EN

Stack Overflow用户
提问于 2019-06-10 00:01:08
回答 4查看 828关注 0票数 3

我目前正在和Entity Framework合作一个ASP.NET MVC项目。该解决方案包括ASP.NET MVC应用程序和一个DataProvider项目。该项目只包括一个EF模型,因为我有一个与我共享数据库的合作伙伴。

问题在于,我们实际上并不共享同一个数据库。我的意思是,数据库的实际服务器并不相同。我们有相同的桌子。但是,每次我们从git存储库中提取数据时,连接字符串都必须更改。该字符串将在ASP.NET MVC项目的web.config文件和EF库的app.config文件中更改。

我的问题是-我们的系统是否有办法检测它在哪个PC上运行并动态修改连接字符串?现在我手动完成。

代码语言:javascript
复制
<!--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>
-->

这就是我现在所做的。我正在注释连接字符串。我想让整个过程自动化。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-10 00:20:47

如果您使用的是aspnet核心,有一种方法可以将环境变量配置为应用程序设置的覆盖。这样,您将拥有一个包含所有常用设置的“默认”appsettings.json,然后在不同的计算机上,您可以配置环境变量,以不同的方式替换(覆盖)每台计算机的连接字符串

我认为对于整个框架的aspnet也可以采用类似的方法。

由于您的连接字符串已经有了一个非常具体的名称"dbShubertEntities“,因此覆盖它应该是非常有效的,并且您不应该冒着在处理不同项目的情况下发生连接字符串冲突的风险。

作为参考,请参阅使用.AddEnvironmentVariables()的部分的https://joonasw.net/view/asp-net-core-1-configuration-deep-dive

票数 1
EN

Stack Overflow用户

发布于 2019-06-10 00:25:45

您可以用动态连接字符串重载DbContext的构造函数

代码语言:javascript
复制
public class MasterDal : DbContext
    {
        public MasterDal(string nameOrConnectionString) : base(nameOrConnectionString)
        {

        }
       // DbSet &  OnModelCreating etc 
    }

然后根据需要在控制器中调用dal

代码语言:javascript
复制
if (logicToGetPc.equal("CEI"))
 { 
    MasterDal dal = new MasterDal("dbShubertEntitiesCEI");
   // do  mumbai related whatever 
 }
 else if (logicToGetPc.equal("Laptop"))
 {
     MasterDal dal = new MasterDal("dbShubertEntitiesCEILaptop");
 }
票数 2
EN

Stack Overflow用户

发布于 2019-06-10 00:10:18

将连接字符串作为环境变量存储在每台PC上。

创建到数据库的连接时,请改用Environment.GetEnvironmentVariable方法检索连接字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56516163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档