我正在尝试在运行时迁移带有实体框架的数据库。
这就是你通常会这样做的方式:
Database.SetInitializer<TContext>(new MigrateDatabaseToLatestVersion<TContext,TMigrationsConfiguration>);
}
但是,直到运行时我才知道 TContext 或 TMigrationsConfiguration 。
我将如何使用运行时类型执行此方法?
更新 1
@Alexander Balte 的建议让我开始使用接口 IDatabaseInitializer
所以这编译没有错误:
foreach (IDatabaseInitializer<DbContext> initializer in moduleNeedingMigration.initializers)
{
System.Data.Entity.Database.SetInitializer(initializer);
}
但是我不能这样做:
public IEnumerable<IDatabaseInitializer<DbContext>> initializers
{
get
{
List<IDatabaseInitializer<Module1Context>> list = new List<IDatabaseInitializer<Module1Context>>();
MigrateDatabaseToLatestVersion<Module1Context, Configuration> init = new MigrateDatabaseToLatestVersion<Module1Context, Configuration>();
list.Add(init);
return list;//Error cannot convert type List<IDatabaseInitializer<Module1Context>> to IEnumerable<IDatabaseInitializer<DbContext>>
}
}
注意Module1Context 继承 DbContext
更新 2
这编译:
return list.Cast<IDatabaseInitializer<UpfContext>>();
但是,当我运行应用程序时,出现此错误:
System.Data.Entity.MigrateDatabaseToLatestVersion`2[Module1.Models.Module1Context,Module1.Migrations.Configuration]' to type 'System.Data.Entity.IDatabaseInitializer`1[System.Data.Entity.DbContext]'.