Как сначала выполнить рефакторинг кода / схемы БД с кодом EF 4 - перенос данных

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

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

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

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

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


person Adam Bell    schedule 29.08.2010    source источник
comment
Что именно вы ищете? У вас нет необходимости для рефакторинга вашей схемы БД с помощью CF.   -  person TheCloudlessSky    schedule 29.08.2010
comment
вам не нужно его реорганизовывать, если вы взорвете и воссоздадите его, но в противном случае вам нужно будет написать и применить к нему сценарии миграции, не так ли? В противном случае он не будет соответствовать коду.   -  person Adam Bell    schedule 29.08.2010


Ответы (3)


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

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

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

ЗАМЕЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ:

Теперь он выпущен как CTP: http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx

person Richard Garside    schedule 07.07.2011

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

https://github.com/rialib/efextensions

person Konstantin Tarkus    schedule 03.03.2011

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

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

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

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

person KallDrexx    schedule 07.07.2011