15

我有几个数据库,它们的架构是相同的。当我使用数据库优先时,连接字符串是在我创建 edmx 文件时指定的。我想知道,有没有办法改变连接字符串?这是,所以我可以选择操作哪个数据库。

4

3 回答 3

33

我们不在 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))
    {
    }
}
于 2014-05-07T21:01:38.907 回答
3

更改 web.config 文件中的连接字符串。

  <connectionStrings>
    <add name="SandBoxEntities" connectionString="metadata=r... />
  </connectionStrings>

我缩写了实际的连接字符串,因为它并不重要——只是想让您了解在 web.config 文件中要查找的内容。

您还可以以编程方式更改连接字符串。查看示例 16.2。以编程方式修改 EntityConnectionString

于 2012-05-09T02:52:58.897 回答
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
}
于 2016-12-19T09:45:07.850 回答