如何动态使用两个数据库连接以避免代码双重

时间:2015-05-05 05:57:41

标签: c# sql-server

我有两个数据库连接。

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构造?我怎样才能“动态”地做到这一点。这甚至可能吗?

感谢您的时间和最好的问候

0 个答案:

没有答案