gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:05:16 25 4
gpt4 key购买 nike

我有一个程序,它有一个 .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 block 中的 Entity Framework 构造函数采用连接字符串?我现在正在使用 EF 6.1,但找不到方法。

此外,如果有更好的方法使用 Entity Framework 来实现此目的,我很乐意更改我的代码,尽管使用 Entity Framework 是必须

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

最佳答案

当您创建 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))
{
...
}

关于c# - 对于一个 EDMX 文件,使用与多个数据库相关的多个连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com