EF 5 在运行时更改连接字符串

33

好的,我想重新创建一个使用EF 4.1创建的项目,转换为EF 5.0,很简单或者至少我觉得是。我旧项目中的其中一件事情是我能够在EF 4.1中在运行时更改数据库连接字符串:

using (var myContext = new MyEntities(ConnectionString))
{

}

简单易懂,但在EF 5.0中你需要以不同的方式来做:

string connectionString = "data source=LocalHost;initial catalog=MyDatabase;user id=MyUserName;password=MyPassword;multipleactiveresultsets=True;App=EntityFramework";

using (var myContext = new MyEntities())
{
         myContext.Database.Connection.ConnectionString = connectionString;
}

现在,我花了大部分两个小时的时间才想通了,所以我想问这是在运行时更改连接字符串的正确方式吗?如果是的话,为什么他们要做出这种改变?

我找到了这个链接,但它没有起作用。我收到了第一个答案中Ladislav Mrnka的第一条评论中详细说明的错误。后来,我找到了这个链接,它似乎可以正常工作。

更新

我重新阅读了我发布的第一个链接,并找到了另一种解决方案,我只需创建一个局部类:

public partial class MyEntities : DbContext
{
    public MyEntities(string connectionString) : base(connectionString) 
    {
          Database.Connection.ConnectionString = connectionString; 
    }
}

16
你应该将你的修改写成答案并接受它... - SRKX
在你的回答中,Database.Connection.ConnectionString = connectionString; 这一行是多余的,因为这个操作已经被基础构造函数完成了。 - Nick Udell
3个回答

6
使用接受连接字符串为参数的上下文构造函数重载。

1
在主类旁边创建一个与目标ContextClass类同名的类,就像这样:
public CustomerContext( string connectionString) 
    : base(connectionString)
{
}

使用方法:

using (var context = new CustomerContext("connectionString"))
{

}

或者

var customerContext=new CustomerContext("yorConnectionString");

var customer=CustomerContext.customer.FirstOrDefault(x=>x.id==1).FirstName;

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接