2016-07-05 2 views
3

Прямо сейчас у меня есть служба, которая взаимодействует с БД, используя Entity Framework. Когда он запускается, он инициализирует БД, используя MigrateDatabaseToLatestVersion<Context, Configuration>, и он работает хорошо.Откат миграции Entity Framework в C#

Ситуация такова, что мы хотим добраться до того места, где у нас есть активные/промежуточные среды с одним исключением: оба связаны с одной и той же БД (у меня нет контроля над этим).

Итак, прямо сейчас, когда я развертываю на этапе, я развертываю службу как отключенную. Когда мы переключаем этап с производством, я выключаю производственный сервис, запускаю промежуточную службу и, при необходимости, переносит DB вперед. Это хорошо работает, и мы делаем это в нескольких средах с предварительным заказом. Если есть проблема (только когда-либо однажды), мы должны вручную запустить Update-Database '[previous migration name]', а затем переключить все на предыдущий сервер.

Я хотел бы автоматизировать миграцию назад так же, как и для переноса вперед. То есть, если служба запускается и видит, что ее схема имеет 1 версию, а самая новая миграция произошла за последние x дней, она автоматически откатится от схемы и примет любую потерю данных.

Я просто не знаю, как это сделать.

ответ

3

Вы можете выполнить это с помощью класса DbMigrator. Вы можете посмотреть таблицу __MigrationHistory, прежде чем ваш код перехода начнет работать, чтобы посмотреть, к какой миграции нужно вернуться. Use DbMigrator.Update(string), чтобы указать конкретную миграцию для «обновления» (вы отбросьте назад, поскольку указали предыдущую миграцию).

Смежные вопросы