Является ли Entity Framework Code First несколько бессмысленным / бесполезным в производстве, и какова хорошая стратегия EF для производства?

29

Недавно я программировал с использованием Entity Framework 4.1 Code First, и мне очень нравится его разработка, но, имея только конечный план и быстро меняющийся список функций, я постоянно изменяю класс / базу данных в соответствии с потребностями приложений.

В разработке нет живых данных, и я могу легко удалить всю базу данных, чтобы она воссоздалась с новой схемой, однако, очевидно, что при живых - это очень плохо!

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

Я лично предпочитаю первый метод, так как думаю, что будет гораздо проще добавить столбец / таблицу, чем воссоздать и перенести данные, но, если я что-то пропустил, это полностью отходит от Code First.

Таким образом, вопрос на самом деле заключается в том, является ли Code First только начальным этапом разработки и какова хорошая стратегия управления EF для производственной среды?

wilhil
источник
Я хотел

Ответы:

15

Мое мнение таково, что автоматическое создание базы данных Code First предназначено только для разработки. Я ответил на аналогичные вопросы о переполнении стека, где я описал как обновить базу данных, так и почему автоматическая функциональность плоха в работе:

Обновление базы данных является полуавтоматической задачей. За этим не должно быть автоматической непроверенной магии - более того, в настоящее время в EF 4.1 нет такой магии (есть только некоторые сведения о функциях, над которыми работает команда ADO.NET).

Вы также можете проверить этот вопрос, чтобы лучше понять, как обновляются веб-сайты.

Ладислав Мрнка
источник
И снова здравствуйте! Вы быстро отвечаете на вопросы EF! :) ... Не знаю, где бы я был без тебя!
до
Прошло несколько месяцев, и моя программа почти закончилась ... Я отмечаю это как ответ, но мне было интересно, изменилось ли что-нибудь / есть ли ресурсы, которые могут помочь?
до
2
Первый публичный превью "Миграции" был выпущен. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ладислав Мрнка
Спасибо, глядя на это сейчас! Мне нравилось разрабатывать с Code First, но я так нервничаю / беспокоюсь о том, чтобы измениться позже!
до
Как вы обрабатываете случай, когда StoredProcs или Views создаются непосредственно в БД для других целей, например, для отчетов, которые не используются приложением. Нам нужно знать, какие SP затронуты изменением схемы в коде в первую очередь.
софтведа
5

Поддерживать сценарии обновления .

В самой базе данных ведите таблицу, в которой содержится запись с версией схемы.

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

Не забудьте сначала сделать резервную копию базы данных.


источник
Следующий шаг: вы уволены;) Обновления базы данных не должны появляться автоматически без резервного копирования в первую очередь - и, возможно, во время простоя, а не когда ОДИН ПОЛЬЗОВАТЕЛЬ запускает более новую версию. Ваш подход идеален - закрыть большие развертывания с кучей ошибок.
TomTom
@TomTom: это зависит. Мы безупречно работаем с приложением БД в течение нескольких лет, что делает именно это: автоматические изменения схемы для нового выпуска, выполняемые приложением, когда оно обнаруживает слишком старую версию. Резервное копирование также выполняется ежедневно, и мы сохраняем все изменения схемы обратно совместимыми (только добавляя поля и таблицы, никогда не удаляя их). Я согласен с тем, что упомянутые вами меры важны, когда изменения не являются обратно совместимыми, и вы не можете гарантировать одновременное обновление всех клиентских приложений (например, для больших корпоративных БД).
Док Браун
Вверху, если изменения нетривиальны. Попробуйте изменить поле в таблице 2 ТБ (и да, я имею дело с этим - и это даже не хранилище данных). Вы попадаете в сценарий, когда вы накапливаете технический долг, потому что вы можете только добавлять поля, а не убирать.
TomTom
2

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

Сначала Code - это драйвер скорости разработки, который не связан с системой времени исполнения.

В производстве у вас будет правильно настроен параметр конфигурации, который запрещает среде выполнения возможность удаления / обновления модели БД.

Casper
источник