Entity framework code first-как запустить обновление-база данных для производственной базы данных


Я хочу знать, как запустить команду "Update-Database" для производственной базы данных.

база данных "Update-Database" отлично работает с моей локальной машины, но как я могу заставить это работать для производственных данных?

Итак, если я внесу изменения в свое приложение, а затем запустил "публикацию" через visual studio, это отлично работает для кодовой стороны вещей, но как я могу запустить команду "Update-Database" для производственных данных.

надеюсь, что этот вопрос делает чувство...

спасибо,

3 53

3 ответа:

чтобы добавить то, что уже сказал @ David...

лично я не доверяю automatic updates в "живых" сценариях, и я всегда предпочитаю ручное администрирование базы данных (т. е. есть проблема с permissions необходимых для создания или изменения БД, не говоря уже о хостинга и т. д.)- но из того, что я видел, миграции довольно прочны, когда дело доходит до синхронизации (на самом деле, единственный способ "развязать" их обычно-удалить БД и заставить полное/свежее обновление).

вот сообщение I сделаны некоторое время назад о том, как script и synchronize database / code и ориентировано на сценарии развертывания (и когда возникают проблемы). Это не относится к вам (пока), но что-то нужно иметь в виду.

MVC3 и первые миграции кода - "модель, поддерживающая контекст 'blah', изменилась с момента создания базы данных"

посмотреть использование миграции Entity Framework (code first) в производстве чтобы приложение автоматически обновляло базу данных при инициализации Entity Framework.

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

http://msdn.microsoft.com/en-us/data/jj591621.aspx (см. раздел Получение сценария SQL)

вы просто хотите автоматически обновить базу данных до последней версии, когда и где выполняется приложение (разработки и производства)?

это может быть не очень хорошая идея, за исключением очень простых сценариев, где вы знаете, что можно доверять автоматической миграции и вручную переносить базы данных не представляется возможным. Пожалуйста, смотрите этот ответ:https://stackoverflow.com/a/15718190/2279059 . Если вы игнорируете это предупреждение, читайте на.

добавить web.config:

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>

это может выглядеть страшно, но это делает в основном то же самое, что и следующий код:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

Если вам не повезло с web.config, то вы также можете попробовать поместить этот код в Global.asax. Я лично предпочитаю конфигурацию над кодом.

если вы хотите, чтобы ваш конфигурационный файл выглядел чище, вы также можете создать новый класс из шаблона MigrateDatabaseToLatestVersion класс, так что вам не нужно использовать загадочные синтаксис передача аргументов типа в вашем web.cofig file:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

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

(источник и более подробная информация: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)