Есть ли чистый способ использования EF 4.3 Migrations при ветвлении? - PullRequest
1 голос
/ 17 марта 2012

Я читаю об EF Migrations и начинаю играть с этим.

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

В настоящее время у меня есть настройка приложениятак что, если я не нахожусь в производственной среде (web.config appsetting), он очищает базу данных и переустанавливает ее, если произошли изменения в модели данных (Code-first).Я думал, что миграции будут хороши тем, что мне не придется полностью уничтожать мои данные при малейшем изменении модели.

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

Кажется, что нет чистого способа сказать, чтобы понизить версию db, когда ветвь впервые произошла, а затем перенести ее туда, где находится db в ветке, над которой я решил работать без МНОГОзапоминание и ручное отслеживание.

У кого-нибудь есть стратегия использования миграций в нетривиальном сценарии разработки с контролем версий?

1 Ответ

3 голосов
/ 17 марта 2012

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

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

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

Редактировать: после объединения изменений между ветвями вам может потребоваться восстановить их метаданные с помощью команды add -igration.

...