【问题标题】:With one EDMX file use multiple connection strings that relate to multiple databases使用一个 EDMX 文件使用与多个数据库相关的多个连接字符串
【发布时间】:2014-07-15 22:49:18
【问题描述】:

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

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

  1. 生产
  2. 分期
  3. 发展

我想制作一个基本上可以做到这一点的方法(警告!伪代码传入)

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...
    }
}

有没有办法让我在 using 块中的实体框架构造函数采用连接字符串?我现在正在使用 EF 6.1,但找不到方法。

此外,如果使用 Entity Framework 有更好的方法来做到这一点,我很乐意转换我的代码,尽管使用 Entity Framework 是必须

如果您需要更多代码,请告诉我,我会更新任何内容。

【问题讨论】:

  • DbContext 有一个构造函数重载,它接受一个连接字符串 (msdn.microsoft.com/en-us/library/gg679467(v=vs.113).aspx)。我在你的问题中遗漏了什么吗?
  • 我一定遗漏了一些东西,当我写我的 using 语句时,它正在使用 (MyDBEntities context = new MyDBEntities()) { //Code } 我找不到新的任何其他方法签名MyDBEntities() 接受任何东西。

标签: c# entity-framework edmx


【解决方案1】:

当您创建 EDMX 时,您设置了上下文对象,它假定它是一个只有一个连接字符串的模型。这很容易更改,因此您可以使用多个连接字符串与多个重复的数据库。

当您的模型代码自动生成时,您最终会得到一个连接数据库上下文。这就是源文件中的样子...

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

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

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

    ...
}

MyConnectionString 对应于应用配置中的连接字符串。请注意,没有构造函数重载来使用您自己的连接字符串,但这没关系,因为我们可以利用 partial class 以及 DBContext 确实有一个需要连接字符串的重载。

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

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

        ...
}

完成。现在您可以将上下文与任何连接字符串一起使用

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

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

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2021-07-02
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多