それぞれが DbContext (および EntityFramework) によって管理されるn 個の環境があります。それらはすべて「同じ」データベースであり (ただし、違いが生じる場合があります)、要件は環境間でコピーする手段を提供することです。
私は現在、これについて以下の方法で行っています。
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 を使用します。
このコードの重複を取り除き、フローをよりクリーンにするにはどうすればよいでしょうか?