Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态更改字符串_C#_Sql - Fatal编程技术网

C# 动态更改字符串

C# 动态更改字符串,c#,sql,C#,Sql,我目前正在从事一个ASP.NETMVC项目,该项目使用实体框架。该解决方案包括ASP.NETMVC应用程序和DataProvider项目。该项目只包括一个EF模型,因为我有一个与我共享数据库的合作伙伴 问题在于,我们实际上并不共享同一个数据库。我的意思是,数据库的实际服务器不同。我们有相同的桌子。但是每次我们从git存储库中提取时,连接字符串都必须更改。字符串在ASP.NETMVC项目的web.config文件和EF库的app.config文件中更改 我的问题是-我们的系统是否有办法检测它运行在

我目前正在从事一个
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=&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>
-->


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

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

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

(在编写本文时,没有代码)

这就是appsettings.json(或它的对应项)的用途

正如我所理解的那样,(你在写作中需要更多的空白,以便于阅读),你基本上是在两个不同的环境中工作的(类似于开发与测试)。简单的配置更改是最简单的方法

旁白:
从字里行间看,你好像是在硬编码连接字符串,我有两个字的建议给你:住手!(我曾经这样做过,这是一个很难改掉的坏习惯)

如果您使用的是aspnet core,那么有一种方法可以将环境变量配置为应用程序设置的覆盖 这样,您将拥有一个“default”appsettings.json,其中包含所有公共设置,然后在不同的机器上,您可以配置环境变量,以不同的方式替换(覆盖)每台机器的连接字符串

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

由于您的连接字符串已经有了一个非常特定的名称“dbShubertEntities”,所以重写它应该非常有效,并且在您处理不同的项目时不应该冒连接字符串冲突的风险


作为参考,请参阅它使用.AddenEnvironmentVariables()的部分。

您可以使用动态连接字符串重载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");
 }

请缩短你的句子。更多的人可以帮你解决问题。另外,我也不知道问题在哪里。我已经修改了问题。为什么不简单地将web.config或app.config添加到.gitignore文件中呢?您可以有一个环境变量,如
PCName
或基于每台机器定义的某个变量,您可以读出并决定当前环境使用哪个连接字符串logicToGetPc做什么?它是否检查环境变量?这是一个你需要定义的函数…&它会告诉你是“PC NICO Laptop-”还是另一个