对于一个EDMX文件,使用与多个数据库相关的多个连接字符串

本文关键字:数据库 字符串 连接 EDMX 于一个 文件 | 更新日期: 2023-09-27 18:13:11

我有一个程序,它有一个.edmx文件,在app.config中有三个连接字符串。

.edmx表示的模式对于3个数据库是相同的:

    生产
  1. 举办

和我想做一个方法,基本上是这样做的(警告!伪代码传入)

foreach(var connectionString in connectionStrings) {
    using (MyCustomDBEntities context = new MyCustomDBEntities(connectionString)) {
        // Do cool things, like insert new records, update records, etc...
    }
}

现在我的代码实际上是这样的,我没有看到另一个方法签名接受连接字符串:

foreach(var connectionString in connectionStrings) {
    using (MyCustomDBEntities context = new MyCustomDBEntities()) {
        // Do cool things, like insert new records, update records, etc...
    }
}

是否有一种方法,使我的实体框架构造器在使用块采取连接字符串?我现在使用的是EF 6.1,我找不到一个方法。

另外,如果有更好的方法来做到这一点与实体框架,我很高兴切换我的代码,虽然使用实体框架是一个必须

如果你需要更多的代码,请告诉我,我会更新任何东西。

对于一个EDMX文件,使用与多个数据库相关的多个连接字符串

在创建EDMX时,您为它假设的只有一个连接字符串的模型设置了上下文对象。这很容易改变,所以你可以有多个连接字符串与几个重复的数据库。

当你的模型代码自动生成时,你最终会得到一个单一的连接DB上下文。在源文件中应该是这样的…

-- MyModel.edmx
    -- MyModel.Context.tt
        -- MyModel.Context.cs

如果你查看MyModel.Context.cs,你应该看到这个…

public partial class MyContext : DbContext
{
    public MyContext ()
        : base("name=MyConnectionString")
    {
    }
    ...
}

MyConnectionString对应于你的应用配置中的连接字符串。请注意,没有构造函数重载来使用您自己的连接字符串,但这没关系,因为我们可以利用partial classDBContext确实具有接受连接字符串的过载的事实。

只需在与MyContext相同的名称空间中创建另一个文件,并使用此代码作为指导…

public partial class MyContext : DbContext
{
        public MyContext (string nameOrConnectionString)
            : base(nameOrConnectionString)
        {
        }
        ...
}

。现在您可以将上下文用于任何连接字符串

using(var context = new MyContext(connectionstring1))
{
    ...
}
using(var context = new MyContext(connectionstring2))
{
    ...
}