Стратегия обработки нескольких миграций EF

Мне нужна помощь в формулировании стратегии действий в ситуациях, когда два или более члена команды выполняют миграцию EF независимо и по разным причинам. Каждый раз, когда мы сталкивались с этим сценарием, он полностью испортил снимок БД, а иногда и миграцию. Наши миграции более сложны, чем обычный шаблон, поскольку они содержат начальные данные и некоторые другие вещи, которые я не могу обсуждать. Но по сути происходит следующее: когда у нас есть две или более миграций, в наших снимках всегда возникают конфликты слияния и нет четкого пути их разрешения.

Я думаю, это в основном из-за того, что у меня есть один снимок, но

Вариант 1: одна миграция за раз (что будет означать, что некоторым членам команды придется перестраивать свою миграцию после добавления другой): т.е. члены команды должны работать вместе. Вариант 2: миграция может не подойти в вашем случае; они очень хорошо работают в простых случаях, но это не значит, что они всегда являются правильным ответом (накладные расходы на сборку всех этих строк сгенерированного C# могут быть проблемой). Пойдите в старую школу и напишите SQL.

Richard 26.07.2024 08:49

Если вы используете встроенный механизм заполнения, будет довольно просто воссоздать миграцию при слиянии. Предполагая, что «другие вещи» не предполагают большого количества ручного редактирования миграций.

JonasH 26.07.2024 09:54

Когда мы создаем PR, мы упоминаем, что это [МИГРАЦИЯ], что означает проверку с высоким приоритетом. После проверки разработчик, если есть новые миграции, объединенные в ветку develop, должен отменить миграцию, объединиться с develop и снова создать миграцию. Затем объединитесь с develop.

Svyatoslav Danyliv 26.07.2024 09:55

Если дополнительные миграции генерируются автоматически, вы можете удалить обе при слиянии и создать новую, содержащую оба изменения.

jeb 26.07.2024 10:58

@SvyatlavDanyliv это хороший вариант. Пожалуйста, сделайте это ответом?

Captain Kenpachi 27.07.2024 20:04

@jeb то же самое. Пожалуйста, сделайте это ответом.

Captain Kenpachi 27.07.2024 20:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предположим, у вас есть основная ветка разработки, например develop. Если кто-то объединяет миграцию в develop, объединять код миграции напрямую небезопасно. Вот как мы справляемся с этой ситуацией:

  1. Мы добавляем [MIGRATION] к названию пул-реквестов, содержащих миграции. Это указывает на необходимость High Priority проверки команды во избежание миграционных конфликтов.
  2. При проверке запроса на запрос вы должны убедиться, что на момент вашего запроса в ветке develop нет новых миграций.
  3. Если в develop уже применены миграции, вам следует ОТМЕНИТЬ свои миграции, объединить их с develop, воссоздать миграции, а затем как можно скорее объединить их с develop. Если кто-то отправит миграцию в develop в течение этого короткого периода, вам следует повторить этот шаг.

Мы пока этого не делаем, но слияние в develop можно ограничить DevOps-конвейерами:

  • Если в вашем PR есть изменения в DataContextModelSnapshot.cs, конвейер должен проверить, есть ли в вашей ветке PR все коммиты, которые изменили этот файл с момента ветвления. Слияние с develop решает эту проблему.
  • Если не все коммиты найдены, слияние следует заблокировать. Вернитесь к шагу 3, чтобы исправить это.

Другие вопросы по теме