Lose EF Code First Migration при работе в разных ветвях TFS?
Мы используем TFS и имеем разные ветки для нашего Dev.
-
в ветке A мы выполнили миграцию, чтобы изменить размер столбца
-
в ветке B мы сделали переход для добавления новой таблицы. Эта ветка не знает о модификации ветки А!
-
обе модификации объединены с основной ветвью.
Когда я делаю базу данных обновлений, она выполняет 2 миграции, но в конце говорит мне, что есть ожидающие изменения. Если я делаю Add-Migration, он создает то же самое, что и первая миграция (в ветке A).
Невозможно обновить базу данных в соответствии с текущей моделью, поскольку есть ожидающие изменения и автоматическая миграция отключены. Либо напишите ожидающую модель изменения в миграции на основе кода или автоматическая миграция. Задавать DbMigrationsConfiguration.AutomaticMigrationsEnabled to true, чтобы включить автоматическое миграция. Вы можете использовать команду "Добавить-миграцию", чтобы записать ожидающие изменения модели в переход на основе кода.
Это потому, что чего-то не хватает в содержимом свойства Target de IMigrationMetadata моей последней миграции, поскольку он не знал о первом?
Можно ли обрабатывать миграции в разных ветвях TFS?
Ответы
Ответ 1
Шаг миграции EF содержит файл метаданных, который имеет подпись модели, которая является результатом этапа миграции. Проблема при слиянии заключается в том, что подпись миграции, выполненная в ветке B, не включает материал, сделанный в процессе миграции в ветке A. До тех пор, пока миграция находится в ветких, это верно. При слиянии это становится неправильным.
Чтобы исправить это, вам необходимо восстановить метаданные последней миграции с помощью
add-migration MyMigrationName
Запуск add-migration
при существующей миграции без параметра -force
будет восстанавливать только метаданные.
Я написал подробный обзор сценария слияния в сообщении EF Migration и Merge Conflict в своем блоге.
Ответ 2
Как дополнение к ответам Андерса Абеля и для тех из вас, у кого возникла проблема при попытке восстановить последние метаданные миграции, заставляя EF создавать отдельную миграцию с добавленным к ней 1.
Вы должны указать полную метку даты/времени.
например.
Если имя файла предыдущей миграции 201701011322_MakeChangesToPotatoTable
Затем вы должны включить полное имя должным образом в команду "Add-Migration".
т.е.
Add-Migration 201701011322_MakeChangesToPotatoTable