我有一个程序有一个.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...
}
}
有没有办法让using块中的Entity Framework构造函数采用连接字符串?我现在正在使用EF 6.1,但我找不到办法。
此外,如果有更好的方法可以使用Entity Framework执行此操作,我很乐意切换我的代码,尽管使用Entity Framework是 必须 。< / p>
如果您需要更多代码,请告诉我,我会更新任何内容。
答案 0 :(得分:5)
创建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))
{
...
}