Я использую Entity Framework Code Первые миграции, и у меня есть сценарий, в котором я хочу запустить набор тестов интеграции. Каждый раз, когда выполняются тесты, я хочу заново создать базу данных и применить все миграции
Шаги должны быть:
- Отбросьте существующую тестовую базу данных (если есть)
- Создайте новую тестовую базу данных и примените все миграции
- Данные семян
Это существующий проект, к которому я добавил миграции, и я использовал команду 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)?