多个DbContexts单接口?

时间:2012-06-01 09:04:29

标签: c# entity-framework dbcontext

我有 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;
            }
        }
    }

这导致了大量的1.代码复制,2。对象复制(我已经获得了POCO类中实体数量的n倍,现在我需要再次复制该类)。

环境可能存在差异,因此使用Automapper。

如何摆脱这种重复的代码并使流程更清洁?

0 个答案:

没有答案