使用Base类将字符串传递给DbContext的构造函数不会设置该值

我决定不再需要对我的DbContext类进行更改

以前我的代码看起来像这样:

 public class RPMContext : DbContext { public RPMContext() : base(ConnectionString()) { } private static string ConnectionString(string connection) { conn = ConfigurationManager.ConnectionStrings["LH_RPMContext"].ConnectionString; return conn; } } 

在“Works”之上,但我需要能够在一个字符串中进行PASS,我可以将静态方法ConnectionString设置为OTHER指定的连接字符串

因此, 我的新代码开始沿着不使用基础的路径

 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; } } 

问题

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

  1. 我需要“设置base这样做的DbContext
  2. 我需要base我正在做的事情吗?
  3. :this()有益吗?

以前我会用private RPMContext db = new RPMContext();实例化private RPMContext db = new RPMContext();

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

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

你正在给自己不必要的工作。

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

 public class RPMContext : DbContext { public RPMContext(string nameOrConnectionString) :base(nameOrConnectionString) { } } 

例如,如果您的配置文件中包含以下内容

         

您可以通过提供要使用的名称连接来创建所需的DbContext。

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

或者……基于你以前的一些post,你可以做这样的事……

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