実行時にエンティティ フレームワークを使用してデータベースを移行しようとしています。
通常は次のようにします。
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]'.