对于一个EDMX文件,使用与多个数据库相关的多个连接字符串
本文关键字:数据库 字符串 连接 EDMX 于一个 文件 | 更新日期: 2023-09-27 18:13:11
我有一个程序,它有一个.edmx文件,在app.config中有三个连接字符串。
.edmx表示的模式对于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...
}
}
是否有一种方法,使我的实体框架构造器在使用块采取连接字符串?我现在使用的是EF 6.1,我找不到一个方法。
另外,如果有更好的方法来做到这一点与实体框架,我很高兴切换我的代码,虽然使用实体框架是一个必须。
如果你需要更多的代码,请告诉我,我会更新任何东西。
在创建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 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))
{
...
}