Публикация моей базы данных (развертывание пакета) с помощью Code First Migrations
У меня есть решение VS2012 MVC4 (EF5). При кодировании я использую свой персональный компьютер с установленным на этом компьютере SQL Express. Каждый раз, когда мне нужно опубликовать обновление для компании, я создаю пакет (.zip) и затем импортирую этот пакет в IIS компании (недоступный с моего компьютера разработчика). Каждый раз, когда я публиковал свое решение на сервере IIS компании, я воссоздаю всю базу данных. Это было в прошлом...
Теперь я изменил свое решение и использую Code First Migrations. Когда это необходимо (объекты изменены), я обновляю свою локальную базу данных благодаря консоли диспетчера пакетов (Update-Database).
Мой вопрос: что мне нужно сделать, чтобы обновить базу данных на IIS компании?
Я вижу скриншот ниже на странице объяснения ( http://msdn.microsoft.com/en-us/library/dd465337.aspx), но у меня нет такого экрана при открытии мастера публикации на моем VS2012.
Ниже показан экран на странице документации:
Ниже экран у меня есть:
Любая помощь с благодарностью.
3 ответа
Вы можете включить этот флажок, отредактировав Properties\YourProject - WebDeploy.pubxml поиск PublishDatabaseSettings
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="Namespace.Models.YourDBClass" Order="1" Enabled="True">
<Destination Path="your-connection-string-goes-here" />
<Object Type="DbCodeFirst">
<Source Path="DBMigration" DbContext="Namespace.Models.YourDBClass, AssamblyName" MigrationConfiguration="Namespace.Migrations.Configuration, Assambly" Origin="Convention" />
</Object>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
Измените Namespace.Models.YourDBClass вашим классом, который наследует DbContext, измените Namespace.Migratins.Configuration, чтобы соответствовать пространству имен конфигурации миграции, и Assambly с вашим именем Assambly.
Сохраните и откройте мастер публикации, у вас будет этот флажок.
Надеюсь, что помощь
Я тоже это видел. Я не уверен, какую эвристику используют инструменты развертывания для определения наличия EF, но эта опция появляется время от времени.
То, что делают инструменты публикации, легко воспроизвести. Вы можете указать инициализатор базы данных в вашем файле web.config (или преобразование в web.config.release) для запуска миграций. Это будет выглядеть примерно так (для преобразования):
<entityFramework>
<contexts xdt:Transform="Insert">
<context type="PlantonDbContextName, PlantonAssemblyName">
<databaseInitializer
type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[
[PlantonDbContextName, PlantonAssemblyName],
[PlantonConfigurationName, PlantonAssemblyName]
], EntityFramework" />
</context>
</contexts>
</entityFramework>
Обобщения в файле конфигурации выглядят ужасно, но вы также можете установить инициализатор в коде: http://msdn.microsoft.com/en-us/library/hh829293(v=vs.103).aspx
Надеюсь, это поможет.
Позвольте мне взять удар и задать вопрос:
Был ли это ранее проект VS2010?:-)
Я спрашиваю, потому что процесс преобразования не работает, чтобы обновить VS2010 до VS2012 и сохранить неизменными профили публикации. Просто слишком много правок.
Лучше всего удалить все имеющиеся у вас профили публикации (файлы) и заново создать новые профили публикации.
Убедитесь, что в ответе Оды указан правильный контекст EF. Мастер публикации должен видеть ваш контекст, прежде чем он создаст профили.
Entity Framework Code Первые миграции данных не работают с VS2012 Web Deploy