Използвам миграции на 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)?