Сначала используйте код EF4: как изменить модель без потери данных - PullRequest
8 голосов
/ 03 мая 2011

В моем Global.asax у меня есть следующая строка:

Database.SetInitializer<myDbSupport>
    (new DropCreateDatabaseIfModelChanges<myDbSupport>());

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

Можно ли сценарий DB изменений и запустить это обновление перед развертыванием модели с измененной структурой?

1 Ответ

12 голосов
/ 03 мая 2011

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

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

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

...