Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何动态使用两个数据库连接以避免代码重复_C#_Sql Server - Fatal编程技术网

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

C# 如何动态使用两个数据库连接以避免代码重复,c#,sql-server,C#,Sql Server,我有两个数据库连接 private MyEntities1 db1; private MyEntities2 db2; var contextHolder = new Dictionary<string, DbContext>(); contextHolder["db1"] = new MyEntities1(); contextHolder["db2"] = new MyEntities2(); 这两个连接具有相同的表。它们都是通过使用现有数据库添加ADO.NET模板生成的 这

我有两个数据库连接

private MyEntities1 db1;
private MyEntities2 db2;
var contextHolder = new Dictionary<string, DbContext>();
contextHolder["db1"] = new MyEntities1();
contextHolder["db2"] = new MyEntities2();
这两个连接具有相同的表。它们都是通过使用现有数据库添加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);
现在,我有很多代码双重码。我试图通过创建一个包含两个连接的数组来解决这个问题

private MyEntities1 db1;
private MyEntities2 db2;
var contextHolder = new Dictionary<string, DbContext>();
contextHolder["db1"] = new MyEntities1();
contextHolder["db2"] = new MyEntities2();
我的问题:

如何避免那些if/else构造?我如何才能更“动态”地执行此操作。这可能吗


感谢您的时间和问候

如果这两个模式具有相同的表,那么您为什么要创建两个单独的上下文类型呢?为什么不直接
myenties
并将连接字符串传递给构造函数呢?啊,好主意。我想那会有用的。非常感谢你。与此不同的是,假设模式不同,如何解决这个问题?如果模式不同,您不应该期望能够对它们执行相同的操作,因此您将无法使用公共类型。。。感觉这是一个完全不同的情况,这是有道理的。再次感谢你,这真的很有帮助!