我已经决定是否需要对我的DbContext
班级
以前我的代码看起来像这样:
public class RPMContext : DbContext
{
public RPMContext() : base(ConnectionString()) { }
private static string ConnectionString(string connection)
{
conn = ConfigurationManager.ConnectionStrings["LH_RPMContext"].ConnectionString;
return conn;
}
}
在“Works”之上,但我需要能够在一个字符串中输入,我可以将静态方法 ConnectionString 设置为OTHER指定的连接字符串< / p>
因此我的新代码开始沿着不使用基础的路径
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
我正在做什么吗?:this()
会有什么好处吗?以前我会使用private RPMContext db = new RPMContext();
现在RPMContext("LH")
以及我希望/想要使用的任何字符串。
显然,使用当前的代码,我正在“使用未分配的局部变量conn”
答案 0 :(得分:4)
你正在给自己不必要的工作。
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>
您可以通过提供要使用的名称连接来创建所需的DbContext。
var db = new RPMContext("name=LH_RPMContext");
var dev_db = new RPMContext("name=DEV_RPMContext");
var qa_db = new RPMContext("name=QA_RPMContext");
或...根据你以前的一些帖子,你可以做这样的事情......
public class RPMContext : DbContext {
public RPMContext()
:this(string.Format("name={0}_RPMContext",ConfigurationManager.AppSettings["Environment"])){}
public RPMContext(string nameOrConnectionString)
:base(nameOrConnectionString) {
}
}