我打算將一箇舊項目移至帶有EF的ASP.NET MVC,並且存在一個問題。幾個項目的DbContext。 ASP.NET MVC EF
我的項目包含幾個子項目,每個項目都有自己的表格,儘管表格結構相同。
Ex。 XXX_Customers,YYY_Customers等
我發現了一個解決方案來實現我想要的。 (使用if-else-then語句)。
控制器動作:
public ActionResult Index(string projectname)
{
List<Customers> list = new List<Customers>() ;
if (projectname=="XXX")
{
list = new BaseContext().Customers.ToList();
}
else if (projectname=="YYY")
{
list = new BaseContext2().Customers.ToList();
}
return View(list);
}
型號:
public class Customers
{
public int Id { get; set; }
public string Name { get; set; }
public string UniqueValue { get; set; }
}
public class BaseContext : DbContext
{
public BaseContext()
: base("myconnectionstring")
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Customers> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customers>().Property(p => p.Id).HasColumnName("ID");
modelBuilder.Entity<Customers>().Property(p => p.Name).HasColumnName("Name");
modelBuilder.Entity<Customers>().Property(p => p.UniqueValue).HasColumnName("UniqueValue");
modelBuilder.Entity<Customers>().ToTable("XXX_Table1", "MyScheme");
}
}
public class BaseContext2 : DbContext
{
public BaseContext2()
: base("myconnectionstring")
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Customers> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customers>().Property(p => p.Id).HasColumnName("ID");
modelBuilder.Entity<Customers>().Property(p => p.Name).HasColumnName("Name");
modelBuilder.Entity<Customers>().Property(p => p.UniqueValue).HasColumnName("UniqueValue");
modelBuilder.Entity<Customers>().ToTable("YYY_Table1", "MyScheme");
}
}
那麼,有沒有這樣做沒有的if-else-then語句什麼好辦法?
也許通過在'class BaseContext:DbContext,IGenericContext'等所有上下文中定義和實現通用接口,或者使用'dynamic'關鍵字? –