使用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; } }
问题
我想这是几个我不理解的问题
- 我需要“设置
base
这样做的DbContext
? - 我需要
base
我正在做的事情吗? - 会
: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) { } }