我正在使用 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();
}
此代码未调用我的Up
InitialCreate 迁移方法,这不是我所期望的。相反,所有表都是在Database.Create()
调用该方法时创建的。我需要运行 InitialCreate 迁移,因为我有额外的代码来创建存储过程。
所以我的问题是,如何以编程方式创建新数据库并运行所有迁移(包括 InitialCreate 迁移)?