C# 多个DbContexts单个接口?

C# 多个DbContexts单个接口?,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,我有n个环境,每个环境都由DbContext(和EntityFramework)管理。它们都是“相同”的数据库(但可能会出现差异),要求提供一种在环境之间进行复制的方法 我目前正在以下面的方式处理这个问题 public class TableA { public string FieldA { get; set; } public string FieldB { get; set; } public string FieldC { get;

我有n个环境,每个环境都由DbContext(和EntityFramework)管理。它们都是“相同”的数据库(但可能会出现差异),要求提供一种在环境之间进行复制的方法

我目前正在以下面的方式处理这个问题

public class TableA
    {
        public string FieldA { get; set; }
        public string FieldB { get; set; }
        public string FieldC { get; set; }

        public static void Copy(EnvironmentTypes to, EnvironmentTypes from, int id)
        {
            var fromModel = TableA.Get(from,id);

            TableA.Add(to,fromModel);
        }

        public static TableA Get(EnvironmentTypes env, int id)
        {
            switch (env)
            {
                case EnvironmentTypes.Development
                    using (var db = new DevelopmentContext.DevelopmentEntities())
                    {
                        var entity = db.TableA.Find(id);

                        return Mapper.Map<TableA>(entity); // using AutoMapper
                    }
                    break;
                case EnvironmentTypes.SystemTest
                    using (var db = new SystemTestContext.SystemTestEntities())
                    {
                        var entity = db.TableA.Find(id);

                        return Mapper.Map<TableA>(entity); // using AutoMapper
                    }
                    break;
            }
        }

        public static TableA Add(EnvironmentTypes env, TableA fromModel)
        {
            switch (env)
            {
                case EnvironmentTypes.Development
                    using (var db = new DevelopmentContext.DevelopmentEntities())
                    {
                        db.TableA.Add(Mapper.Map<DevelopmentContext.TableA>(fromModel));
                        db.SaveChanges();
                        return fromModel; 
                    }
                    break;
                case EnvironmentTypes.SystemTest
                    using (var db = new SystemTestContext.SystemTestEntities())
                    {
                        db.TableA.Add(Mapper.Map<SystemTestContext.TableA>(fromModel));
                        db.SaveChanges();
                        return fromModel; 
                    }
                    break;
            }
        }
    }
公共类表a
{
公共字符串字段a{get;set;}
公共字符串字段b{get;set;}
公共字符串字段c{get;set;}
公共静态无效副本(EnvironmentTypes-to、EnvironmentTypes-from、int-id)
{
var fromModel=TableA.Get(from,id);
表A.添加(至,来自模型);
}
公共静态表Get(环境类型env,int-id)
{
开关(环境)
{
案例环境类型。开发
使用(var db=newdevelopmentcontext.DevelopmentEntities())
{
var entity=db.TableA.Find(id);
返回Mapper.Map(entity);//使用AutoMapper
}
打破
案例环境类型.SystemTest
使用(var db=new SystemTestContext.SystemTestEntities())
{
var entity=db.TableA.Find(id);
返回Mapper.Map(entity);//使用AutoMapper
}
打破
}
}
公共静态表A添加(环境类型env,表A fromModel)
{
开关(环境)
{
案例环境类型。开发
使用(var db=newdevelopmentcontext.DevelopmentEntities())
{
db.TableA.Add(Mapper.Map(fromModel));
db.SaveChanges();
从模型返回;
}
打破
案例环境类型.SystemTest
使用(var db=new SystemTestContext.SystemTestEntities())
{
db.TableA.Add(Mapper.Map(fromModel));
db.SaveChanges();
从模型返回;
}
打破
}
}
}
这导致了大量的1。代码复制,2。对象复制(我已经在它们的POCO类中获得了n倍的实体数量,现在我需要再次复制该类)

环境可能有所不同,因此使用Automapper


如何消除代码的重复并使流更干净?

就我个人而言,我会使用一种数据上下文类型,使用不同的连接/连接字符串,并将数据作为TSQL迁移脚本的一部分来处理。看起来这是我必须要做的。我显然是想让它变得比需要的复杂得多!