Подтвердить что ты не робот

Почему Add-Migration иногда создает повторяющиеся миграции?

У меня возникла странная проблема с первыми миграциями кода в Entity Framework версии 5. Иногда Update-Database выходит из строя из-за ожидающих изменений, но команда Add-Migration производит только миграции с изменениями базы данных, которые уже содержатся в последних миграциях, и база данных вверх -встретиться. Поэтому я ожидаю, что новая миграция будет пустой.

Как Add-Migration определить, какие изменения требуются? Кажется, он не использует базу данных в качестве источника.

4b9b3361

Ответ 1

Снимок базы данных сохраняется вместе с каждой миграцией в файле .resx. Когда вы добавляете новую миграцию, EF сравнивает текущую модель базы данных (которая генерируется из ваших классов моделей и параметров из вашего DbModelBuilder) с последней миграцией и определяет изменения между ними.

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

Пример:

Разработчик 1

Миграция AddColumnA

Разработчик 2

Миграция AddColumnB

Объединенная версия

Migration AddColumnA - моментальный снимок базы данных включает в себя columnA

Миграция AddColumnB - моментальный снимок базы данных включает columnB, но не Columna

Если вы добавляете другую миграцию, изменения определяются в отношении миграции AddColumnB, которая не содержит информации о столбце A. Обходной путь для этой проблемы заключается в создании фиктивной миграции (с пустыми методами "вверх" и "вниз" ), чтобы получить нужный снимок базы данных в последней миграции.

Объединенная версия

Migration AddColumnA - моментальный снимок базы данных включает в себя columnA

Миграция AddColumnB - моментальный снимок базы данных включает columnB, но не Columna

Dummy миграции - моментальный снимок базы данных с помощью столбца A и столбца B