我有几个数据库,它们的架构是相同的。当我使用数据库优先时,连接字符串是在我创建 edmx 文件时指定的。我想知道,有没有办法改变连接字符串?这是,所以我可以选择操作哪个数据库。
3 回答
我们不在 web.configs 中存储连接字符串,因此接受的解决方案对我们不起作用。如果您只是尝试通过基本 DbContext 构造函数提供连接字符串,您将收到以下异常:
如果在 Code First 模式下使用,使用用于 Database First 和 Model First 开发的 T4 模板生成的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 Code First 添加使用属性或 DbModelBuilder API 的任何其他配置,然后删除引发此异常的代码。
要解决此问题,请按如下方式创建上下文的部分类,并使用附加的 EF 元数据格式化连接字符串(其中 MyContext 是您的语境型号名称(例如,您的型号名称是 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))
{
}
}
更改 web.config 文件中的连接字符串。
<connectionStrings>
<add name="SandBoxEntities" connectionString="metadata=r... />
</connectionStrings>
我缩写了实际的连接字符串,因为它并不重要——只是想让您了解在 web.config 文件中要查找的内容。
您还可以以编程方式更改连接字符串。查看示例 16.2。以编程方式修改 EntityConnectionString。
您可以在 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
}