Не удалось создать явную миграцию (EF5) (ожидающие миграции)

121
10

Мы используем первые преобразования кода с EF5 on (localdb)\v11.0 (Vstudio 2012), и все прошло хорошо.


Однако - сегодня мне нужно было создать пару индексов на нескольких таблицах и столкнуться с проблемами.


Сначала я сделал это в ПМ:


PM> add-migration AddIdxToOutage
Scaffolding migration 'AddIdxToOutage'.

Я модифицировал код в миграции леса:


public override void Up()
{
Sql(@"CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages]
(
[WtgId] ASC,
[StartDateTime] ASC,
[EndDateTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]");
}

Я обновил базу данных, и результат был следующим:


PM> update-database -startupprojectname D3A.Data -force -verbose
Using StartUp project 'D3A.Data'.
Using NuGet project 'D3A.Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201310301258520_AddIdxToOutage].
Applying code-based migration: 201310301258520_AddIdxToOutage.
CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages]
(
[WtgId] ASC,
[StartDateTime] ASC,
[EndDateTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
[Inserting migration history record]
Running Seed method.

Икс был создан на столе, и все были довольны.


Однако - когда я создал следующий индекс, я столкнулся с проблемами. Я создал пустую задачу миграции как


PM> add-migration AddIdxToState
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301258520_AddIdxToOutage]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

Простите мой французский - но WT *?


Похоже, что это не так. Я могу вернуться к шагу миграции, предшествующему добавлению первого idx, снова добавить idx'es и повторить то же самое.


Можете ли вы рассказать мне, что мне здесь не хватает? Что я делаю неправильно?


Edit:


Первоначально я думал, что моя проблема заключалась в том, что я выполнял необработанный SQL по отношению к базе данных /localdb, но похоже, что все, что я делаю, теперь останавливается после первого добавления-миграции.


Я просто добавил новую таблицу в базу данных, и это результат std-out из PM Console:


PM> add-migration AddMyLoggerTable
Scaffolding migration 'AddMyLoggerTable'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201310301419063_AddMyLoggerTable' again.
PM> update-database -startupproject DongEnergy.D3A.Data -verbose
Using StartUp project 'D3A.Data'.
Using NuGet project 'D3A.Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201310301419063_AddMyLoggerTable].
Applying code-based migration: 201310301419063_AddMyLoggerTable.
CREATE TABLE [dbo].[MyLoggerTable] (
[id] [int] NOT NULL,
[functionId] [int],
[elapsedTime] [bigint],
[noOfRecords] [int],
[dateCreated] [datetime] DEFAULT getDate()
)
[Inserting migration history record]
Running Seed method.
PM> add-migration AddMyLoggerTableFunction
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301419063_AddMyLoggerTable]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

Обратите внимание, как я добавляю новую, пустую задачу переноса, используйте метод CreateTable и успешно обновили его в базе данных. Но когда я добавляю новый шаг перехода, он жалуется, что задача, которая была просто "зафиксирована" в базе данных, все еще "ожидает" - хотя обновлены оба объекта migrationhistory и базы данных.

спросил(а) 2013-10-30T16:11:00+04:00 6 лет, 11 месяцев назад
1
Решение
123

Это может не решить вопрос OP, но у меня была аналогичная проблема, когда я разрабатывал новую базу данных и пытался добавить две миграции, прежде чем делать какое-либо обновление базы данных.


Мое решение состояло в том, чтобы запустить мое приложение, чтобы ожидающие миграции могли обновить базу данных. Приложение автоматически обновляет базу данных с помощью MigrateDatabaseToLatestVersion. Это можно сделать, набрав Update-Database из консоли диспетчера пакетов.


Если добавлена ​​миграция и внесены дополнительные изменения, которые необходимо добавить к одной и той же миграции, также нет необходимости удалять ее и повторно добавлять (что я пытался сделать сначала). Вы можете просто обновить существующую ожидающую миграцию. Справка отображается при запуске средства Add-Migration из консоли диспетчера пакетов (выделение мной).

Код конструктора для этого файла миграции содержит моментальный снимок вашего текущего      Код Первая модель. Этот снимок используется для расчета изменений в вашей модели      когда вы поднимете следующую миграцию. Если вы внесете дополнительные изменения в свой      модель, которую вы хотите включить в эту миграцию, а затем вы можете ее поднять      запустив 'Add-Migration [Timestamp] _MigrationName' снова.



Другими словами, запустите средство Add-Migration с тем же идентификатором, что и ожидающая операция, и новые изменения будут объединены со старым. Если вы заметили, что изменения не объединены, вы можете использовать флаг -F (как в Add-Migration <Name> -Force), чтобы принудительно выполнить миграцию, как примечания anthony-arnold в комментариях.

ответил(а) 2014-01-30T13:03:00+04:00 6 лет, 8 месяцев назад
90

Еще одна возможная причина - если в решении есть разные проекты, такие как UI и Core (ваша конфигурация db здесь), тогда убедитесь, что при выполнении миграции ваш основной проект задан как проект Startup. Это решило мою проблему. Счастливое кодирование:)

ответил(а) 2015-06-11T16:14:00+03:00 5 лет, 4 месяца назад
70

Просто в этом случае мне интересно. Я столкнулся с ошибкой "Не удалось создать явную миграцию, потому что следующая явная миграция ожидается..." после того, как я изменил значение ContextKey в Configuration.cs файл. Я изменил его, и проблема исчезла.

ответил(а) 2015-05-22T17:55:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема