我有几个数据库,它们的架构是相同的。当我使用数据库优先时,在创建edmx文件时指定连接字符串。我想知道,有没有办法改变连接字符串?这是,所以我可以选择要运行的数据库。 Thx提前!
答案 0 :(得分:29)
我们不会在web.configs中存储连接字符串,因此接受的解决方案对我们不起作用。如果您只是尝试通过基本DbContext构造函数提供连接字符串,那么您将获得以下异常:
如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作。要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串。要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码。
要解决此问题,请按如下所示创建上下文的部分类,并使用其他EF元数据格式化连接字符串(其中MyContext是您的 context 模型名称(例如,您的模型名称为MyModel.edmx) ,下面的代码中的MyContext
被MyModel
替换为所有三个扩展名.csdl,.ssdl,.msl使用)):
public partial class MyContext
{
public MyContext(string connStr)
: base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr))
{
}
}
答案 1 :(得分:3)
更改web.config文件中的连接字符串。
<connectionStrings>
<add name="SandBoxEntities" connectionString="metadata=r... />
</connectionStrings>
我缩写了实际的连接字符串,因为它并不重要 - 只是想让你知道在web.config文件中要查找的内容。
您还可以以编程方式更改连接字符串。查看Example 16.2. Programmatically modifying an EntityConnectionString。
答案 2 :(得分:1)
您可以在web.config中定义多个连接字符串,然后在您的代码中使用它们。 例如:`
<connectionStrings>
<add name="conStr1" connectionString="metadata=r... />
</connectionStrings>`
<connectionStrings>
<add name="conStr2" connectionString="metadata=r... />
</connectionStrings>`
等等
并且您的上下文类构造函数获取连接字符串名称作为参数:
public MyContext(string connStr)
: base(connStr) { }
确定。现在你可以在你的代码中使用如下:
using (var db = new MyContext("name=conStr1"))
{
//your code here
}
然后
using (var db = new MyContext("name=conStr2"))
{
//your code here
}