У меня есть локальный экземпляр базы данных, который я недавно создал с помощью DbContext.Database.Create()
, поэтому существует таблица __MigrationHistory
с записью , которая соответствует коду на данный момент.Сделать код EF4.3 Первыми мигрантами игнорировать ожидающие миграции
Однако некоторые миграции на основе кода существуют в папке Migrations. Они будут выполняться в наших средах разработки и промежуточного уровня, чтобы эти базы данных соответствовали коду. Однако мне не нужно применять их локально, так как я создал базу данных с использованием текущего кода.
Теперь мне нужно внести изменения в модель и создать соответствующую миграцию. Но когда я бегу Add-Migration TestMigration
, я получаю следующее сообщение об ошибке
Unable to generate an explicit migration because the following explicit
migrations are pending:
[201203271113060_AddTableX,
201203290856574_AlterColumnY]
Apply the pending explicit migrations before attempting to generate
a new explicit migration.
Что я должен делать в этом случае? Я не могу указать инструмент Add-Migration в другой среде, потому что не гарантируется, что версия соответствует тому, что у меня локально. Мне нужна миграция, которая соответствует только изменениям, которые я сделал.
Кажется, у меня есть несколько вариантов, но ни один не идеальны:
- Удалить другие миграции из папки Миграции, запустите команду Add-Migration, обновить базу данных, а затем восстановить старые миграции. Это просто, но кажется немного хакерским.
- Вернитесь к версии модели в исходном элементе управления, к которой была применена первая миграция, затем создайте ее и используйте для создания базы данных. Затем получите последнюю версию, примените все миграции, затем я готов добавить свою миграцию. Это похоже на много усилий!
- Создайте миграцию вручную.
У кого-нибудь есть предложения по управлению этим?
Это не работает, потому что предыдущие операции миграции не могут выполняться в базе данных, созданной с использованием 'DbContext.Database.Create()'. Представьте себе миграцию, которая добавляет столбец, но в вашей новой локальной базе данных у вас уже есть этот столбец, поэтому вы получаете 'SqlException', и соответствующая строка никогда не добавляется в таблицу' __MigrationHistory'. См. Мой ответ за то, что я считаю правильным. –