C# 将字符串传递到具有基类的DbContext构造函数中并没有设置该值

C# 将字符串传递到具有基类的DbContext构造函数中并没有设置该值,c#,.net,entity-framework,C#,.net,Entity Framework,我已决定出于业务需要更改我的DbContext类 以前我的代码是这样的: public class RPMContext : DbContext { public RPMContext() : base(ConnectionString()) { } private static string ConnectionString(string connection) { conn = ConfigurationManager.ConnectionStrin

我已决定出于业务需要更改我的
DbContext

以前我的代码是这样的:

public class RPMContext : DbContext
{
    public RPMContext() : base(ConnectionString()) { }

    private static string ConnectionString(string connection)
    {
        conn = ConfigurationManager.ConnectionStrings["LH_RPMContext"].ConnectionString;
        return conn;
    }
}
上面的“工作”,但我需要能够传入一个字符串,在该字符串中我能够将static方法ConnectionString设置为其他指定的连接字符串

因此,我的新代码开始走上了一条不使用的道路

public class RPMContext : DbContext
{

    public RPMContext(string environment)
    {
        ConnectionString(environment);
    }  

    private static string ConnectionString(string connection)
    {

        string conn;

        if (connection == "LH")
        {
            conn = ConfigurationManager.ConnectionStrings["LH_RPMContext"].ConnectionString;
        }
        else 
        {
          // dev , qa  etc..
        }

        return conn;
    }


}
问题

我想这是我不理解的几个问题

  • 我需要“设置
    DbContext
    ,其中
    base
    会这样做吗
  • 我所做的事是否需要
    base
  • :这个()
    会有好处吗
  • 之前我将使用
    private RPMContext db=new RPMContext();

    现在
    RPMContext(“LH”)
    和我希望/想要使用的任何字符串

    var db = new RPMContext("name=LH_RPMContext");
    var dev_db = new RPMContext("name=DEV_RPMContext");
    var qa_db = new RPMContext("name=QA_RPMContext");
    

    显然,在当前的代码中,我得到了“使用未分配的局部变量conn”

    您给了自己不必要的工作

    DbContext
    已经有一个构造函数,该构造函数在配置文件中接受完整的连接字符串或连接字符串的名称

    public class RPMContext : DbContext {    
        public RPMContext(string nameOrConnectionString)
            :base(nameOrConnectionString) {
        }  
    }
    
    例如,如果您的配置文件中有以下内容

    <appSettings>
        <add key="Environment" value="LH" />
    </appSettings>
    <connectionStrings>
        <add name="LH_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
        <add name="DEV_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
        <add name="QA_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
    </connectionStrings>
    
    或者…根据你以前的一些帖子,你可以这样做

    public class RPMContext : DbContext {
    
        public RPMContext()
            :this(string.Format("name={0}_RPMContext",ConfigurationManager.AppSettings["Environment"])){}
    
        public RPMContext(string nameOrConnectionString)
            :base(nameOrConnectionString) {
        }  
    }
    

    你在给自己做不必要的工作

    DbContext
    已经有一个构造函数,该构造函数在配置文件中接受完整的连接字符串或连接字符串的名称

    public class RPMContext : DbContext {    
        public RPMContext(string nameOrConnectionString)
            :base(nameOrConnectionString) {
        }  
    }
    
    例如,如果您的配置文件中有以下内容

    <appSettings>
        <add key="Environment" value="LH" />
    </appSettings>
    <connectionStrings>
        <add name="LH_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
        <add name="DEV_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
        <add name="QA_RPMContext" connectionString="..." providerName="System.Data.EntityClient" />
    </connectionStrings>
    
    或者…根据你以前的一些帖子,你可以这样做

    public class RPMContext : DbContext {
    
        public RPMContext()
            :this(string.Format("name={0}_RPMContext",ConfigurationManager.AppSettings["Environment"])){}
    
        public RPMContext(string nameOrConnectionString)
            :base(nameOrConnectionString) {
        }  
    }
    

    好的,我现在明白了,非常感谢你澄清这一点!我将让控制台应用程序让用户选择要使用的环境,因此当管理员用户看到dev、qa等选项时,请输入该数字,然后我阅读
    byte environment=byte.Parse(console.ReadLine())
    这样,我真的希望一个静态全局变量在控制台应用程序运行期间保持不变。既然我有几个类和各种调用来使用dbcontext,我如何“设置它并忘记它?”“基于第一个管理员用户选择??thx againOk,我现在明白了,非常感谢你澄清这一点!我将让控制台应用程序让用户选择使用哪个环境,这样当管理员用户看到dev、qa等选项时。。然后输入那个数字,然后我读取
    byte-environment=byte.Parse(Console.ReadLine())在其中,我真的希望一个静态全局变量在控制台应用程序运行期间保持不变。既然我有几个类和各种调用来使用dbcontext,我怎么能根据第一个管理员用户选择“设置并忘记它”??又是thx