Entity Framework Code First の移行を使用しており、一連の統合テストを実行するシナリオがあります。テストを実行するたびに、データベースを再作成し、すべての移行を適用したい
手順は次のとおりです。
- 既存のテスト データベースを削除します (存在する場合)。
- 新しいテスト データベースを作成し、すべての移行を適用します
- シードデータ
これは、移行を追加した既存のプロジェクトです。Enable-Migrations コマンドを使用して、データベースにすべてのテーブルを追加するコードを含む「InitialCreate」移行を作成しました。
私のカスタムのコードはIDatabaseInitializer
次のとおりです。
public void InitializeDatabase(MyContext context)
{
//delete any existing database, and re-create
context.Database.Delete();
context.Database.Create();
//apply all migrations
var dbMigrator = new DbMigrator(new Configuration());
dbMigrator.Update();
//seed with data
this.Seed(context);
context.SaveChanges();
}
私の InitialCreate 移行のUp
メソッドは、このコードによって呼び出されません。これは私が期待したものではありません。Database.Create()
代わりに、メソッドが呼び出されると、すべてのテーブルが作成されます。ストアド プロシージャを作成する追加のコードがあるため、InitialCreate 移行を実行する必要があります。
私の質問は、プログラムで新しいデータベースを作成し、すべての移行 (InitialCreate 移行を含む) を実行するにはどうすればよいですか?