Я использую первые миграции интерфейсов Entity Framework в течение некоторого времени в совершенно новом проекте, и они до сих пор отлично работали в основной версии приложения.
Тем не менее, мы сейчас находимся в точке проекта, где создаются ветки, поскольку мы имеем несколько рабочих потоков. В рамках последней части работы мы поняли, что использование миграций по отраслям может быть проблематичным - так что мой вопрос в том, что люди нашли лучший способ управления этим?
Например (я, очевидно, упростил их для обсуждения):
Отрасль A: Разработчик 1 добавляет миграцию Add-UserDateCreated, которая добавляет поле в объект User. Файл миграции содержит код для добавления поля и состояние модели в это время.
Филиал B: Разработчик 2 добавляет миграцию "Add-UserMiddleName", которая добавляет другое поле в объект User. Файл миграции содержит код для добавления поля и состояние модели в это время (но у него, очевидно, нет поля, добавленного в другую миграцию).
Эти миграции работают нормально на своих ветках, но когда вы объедините их обратно в багажник, вы застряли:
- Вы не можете просто сохранить отдельные файлы миграции, поскольку состояние сохраненной модели будет неправильным. Например, миграция "Add-UserMiddleName" ДОЛЖНА иметь состояние модели с добавленным полем "Add-UserDateCreated", но оно не будет.
- Вы не можете объединить миграцию в один файл, поскольку вы попали в ту же проблему *
Это означает, что единственный способ по-настоящему избежать этих проблем - работать с другой копией базы данных для каждой ветки, игнорировать миграции при слиянии в магистраль и добавлять миграцию одного снимка при слиянии (в версии для внешней линии базы данных), но тогда вы, возможно, получите множество изменений в одной миграции, которая никогда не является хорошей идеей (а также потеряет любой пользовательский код, который вы указали в своем классе миграции).
Итак, как другие люди управляют такими ситуациями? Мне было бы интересно узнать мнение других народов.
* Мне любопытно, какие проблемы это действительно вызовет в реальном мире, если кто-нибудь знает?