Как рефакторинг кода / схемы БД с кодом EF 4 первым - миграция данных - PullRequest
7 голосов
/ 29 августа 2010

Каковы лучшие практики для рефакторинга базы данных с codefirst EF4?

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

В настоящее время у Microsoft есть решение для этого сначала с моделью:

http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx?PageIndex=2#comments

У кого-нибудь есть хорошая стратегия для кода в первую очередь?

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Команда EF работает над функцией миграции для EF, которая должна решить эту проблему.

http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx

Скотт Гу сказал в своем недавнем туре по Европе, что скоро они выпустят эту функцию. Я задерживаю дыхание.

ДОСТОЙНОЕ ОБНОВЛЕНИЕ:

Это было теперь выпущено как ОСАГО: http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx

1 голос
/ 07 июля 2011

В моем приложении CodeFirst локальные сборки имеют флаг app.config, который обозначает, что он не работает. Когда я не работаю, он полностью уничтожает базу данных. Поскольку мой пользователь рабочей базы данных НЕ имеет прав на удаление базы данных, даже если мое преобразование web.config каким-то образом пропущено (поэтому EF пытается воссоздать базу данных), моя производственная база данных не будет удалена, и вместо этого будет выдано исключение.

Мой рабочий процесс выглядит так:

  1. Проверьте производственную ветвь кода с последними изменениями
  2. Быстрое тестирование дыма / регрессии (это должно быть сделано до проверки кода в производственной ветке, но на всякий случай)
  3. Загрузите последнюю резервную копию моей производственной базы данных и установите ее на моем локальном сервере SQLEXPRESS
  4. Выполнить Открыть DBDiff между базой данных, созданной моим локальным кодом (несмотря на то, что это производственный код, поскольку он локальный, он воссоздает базу данных) для производственной резервной копии.
  5. Просмотр сгенерированных сценариев и попытка их запуска в рабочей резервной копии
  6. Предполагая, что ошибок не произошло, перезапишите базу данных, в которой был создан код с производственной резервной копией, и проведите тестирование с производственными данными, чтобы убедиться, что все данные все еще не повреждены;
  7. Запуск сценариев в реальной производственной базе данных.

Шаг # 2 автоматически создает новую, чистую базу данных на основе последней модели данных, поэтому я всегда знаю, что у меня есть актуальная база данных, в которой нет артефактов от усилий по разработке, которые, возможно, еще не готовы к работе.

1 голос
/ 03 марта 2011

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

https://github.com/rialib/efextensions

...