我有两个数据库连接。
private MyEntities1 db1;
private MyEntities2 db2;
这两个连接具有相同的表。它们都是通过使用现有数据库添加ADO.NET模板生成的。
两个MSSQL连接将从两个旧的MySQL数据库中检索数据。这是一次迁移。
if (isContext1)
{
var transactionContext = this.db1.Database.BeginTransaction();
this.db1.Database.ExecuteSqlCommand(setIdentityInsertOn);
this.db1.MyTable.AddRange(res);
this.db1.SaveChanges();
this.db1.Database.ExecuteSqlCommand(setIdentityInsertOff);
transactionContext.Commit();
}
else
{
var transactionContext = this.db2.Database.BeginTransaction();
this.db2.Database.ExecuteSqlCommand(setIdentityInsertOn);
this.db2.MyTable.AddRange(res);
this.db2.SaveChanges();
this.db2.Database.ExecuteSqlCommand(setIdentityInsertOff);
transactionContext.Commit();
}
其中setIdentityOn和Off是:
var database = (isContext1) ? "db1" : "db2";
var setIdentityInsertOn = string.Format("SET IDENTITY_INSERT [{0}].[dbo].[MyTable] ON", database);
现在,我有很多代码双峰。我试图通过创建一个包含两个连接的数组来解决这个问题。
var contextHolder = new Dictionary<string, DbContext>();
contextHolder["db1"] = new MyEntities1();
contextHolder["db2"] = new MyEntities2();
不幸的是,这不起作用;我想这是因为我说第二种类型的字典是DbContext,所以编译器不知道这些内容。
如果我能说出这样的话,我的所有问题都将得到解决:
var context = if(isContext1) ? this.db1 : this.db2;
我的问题:
如何避免那些if / else构造?我怎样才能“动态”地做到这一点。这甚至可能吗?
感谢您的时间和最好的问候