Миграция EF 4.3 — как создать сценарий перехода на более раннюю версию?

У меня есть проблема, на которую я не смог найти ответ в Интернете.

Я использую миграцию CodeFirst EF 4.3.1 с MsSQL.

Я добавил несколько миграций и теперь хочу создать скрипт для обновления/отката между двумя миграциями.

Для обновления я запускаю следующую команду, которая успешно воспроизводит сценарий обновления:

PM> Update-Database -Script -SourceMigration:"201205161144187_AddPostAbstract" -TargetMigration:"201205161203310_BlogLimitsAndTableRename"

Однако для понижения я запускаю следующую команду, которая завершается со следующей ошибкой:

PM> Update-Database -Script -SourceMigration:"201205161203310_BlogLimitsAndTableRename" -TargetMigration:"201205161144187_AddPostAbstract"
Scripting the downgrade between two specified migrations is not supported.

Любые идеи, как я могу создать сценарий понижения версии?

Спасибо.




Ответы (1)


Похоже, что API миграции ожидает, что вы хотите сделать даунгрейд только с «последней версии».

Если BlogLimitsAndTableRename является вашей самой последней миграцией (последней примененной), вы можете просто запустить:

Update-Database -Script -TargetMigration:"201205161144187_AddPostAbstract"

Если это не последняя ваша миграция, вам нужно сначала вернуть базу данных разработки к ней:

Update-Database -TargetMigration:"201205161203310_BlogLimitsAndTableRename"

и теперь вы сможете использовать первую команду для получения скрипта.

person Ladislav Mrnka    schedule 03.06.2012
comment
Это имеет смысл. Представьте, что у вас есть база данных в состоянии 5, и вы попытаетесь заставить сценарий понизить ее с 4 до 3. Тогда базу данных можно легко повредить. Либо указание его на db действительно в состоянии 4, либо локальное переключение в состояние 4 заставляет вас подумать об этом, прежде чем создавать необратимый беспорядок. OTOH это может поддерживаться каким-либо переключателем -Force или большим красным предупреждением. :) - person cincura.net; 03.06.2012
comment
Я думал о том, чтобы иметь базу данных в состоянии 5, и теперь получил сценарий для ее понижения с 5 до 2. Миграция EF заставляет меня понизить ее с 5 до 4, затем понизить с 4 до 3, а затем с 3 до 2, в то время как все, что я хочу заключается в создании одного сценария, который уже будет содержать все эти понижения без необходимости их реального выполнения. (Для обновления, например, вы можете иметь базу данных в состоянии 5 и создать сценарий обновления со 2 до 5). - person mayash; 04.06.2012
comment
Или вы можете иметь базу данных в состоянии 5 и создать сценарий обновления со 2 до 4. - person mayash; 04.06.2012
comment
Вы можете создать сценарий понижения с текущей версии (5) до версии 2. Вам просто нужно запустить первую упомянутую команду с именем второй миграции. - person Ladislav Mrnka; 04.06.2012
comment
Для любого, кто использует DbMigrator и MigratorScriptingDecorator через С#, вам, как ни странно, нужно передать sourceMigration: null методу ScriptUpdate миграциона. Даже если вы передадите последний идентификатор миграции, он все равно жалуется, что вы не можете перейти на более раннюю версию между двумя версиями (та же ошибка, что и OP) - person aaaaaa; 18.10.2017