Внесение изменений в модель домена с использованием кода сначала (ORM) во время производства

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

Что мне делать с данными, накопленными за время работы?

Должен ли я вручную перенести данные из схемы версии A в схему версии B. Нужно ли кодировать схему, чтобы предотвратить критические изменения? Должен ли я попрощаться с приоритетом кода после первоначального развертывания и переключиться на приоритет базы данных?

Что мне не хватает?


person ndsc    schedule 24.02.2012    source источник
comment
Я думаю, вам нужен Code First Migrations, он включен в версию 4.3, см.: blogs.msdn.com/b/adonet/archive/2011/11/29/   -  person Marthijn    schedule 24.02.2012


Ответы (3)


Во-первых, отказ от ответственности: у меня нет большого опыта работы с EF, и я предполагаю, что в этом отношении он похож на nHibernate. Я ответил на аналогичный вопрос здесь. Суть в том, что EF и NHibernate — это всего лишь ORM-фреймворки. Они хорошо осведомлены о вашем домене, но только в его текущем состоянии, они не знают истории. ORM может генерировать схему базы данных, но эта функция полезна только для начальных развертываний и интеграционного тестирования. Вы не можете полагаться на него в производственном приложении, которое развивается и требует обновлений (как схемы, так и данных).

По моему опыту, нет никакого волшебного инструмента, который будет писать сценарии обновления, они должны быть написаны вручную или, по крайней мере, проверены разработчиком. Инструменты могут предоставить вам основу для выполнения этих сценариев, например RoundhouseE. У Скотта Аллена есть отличная серия о подходе «только вперед, однократный запуск».

person Dmitry    schedule 24.02.2012
comment
Звучит логично, и я подозревал, что использую CF только для первоначального развертывания. - person ndsc; 25.02.2012

Как упоминалось в комментарии @Henkie, миграция данных EF пытается решить именно ту проблему, которую вы описываете.

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

ссылки:

  1. Код -На основе

  2. Автоматически

Надеюсь это поможет.

person Davin Tryon    schedule 24.02.2012

С ЭФ 4.3. вам нужно использовать миграцию, и вы можете сделать это с существующей базой данных.

Это отличный пост в блоге именно о том, о чем вы говорите: Использование EF 4.3 Code First Migrations с существующей базой данных от Джули Лерман.

Я также веду блог об этом прямо сейчас: Использование Entity Framework Code First с существующей базой данных.

person Ralph Lavelle    schedule 25.02.2012