Публикация моей базы данных (развертывание пакета) с помощью 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, чтобы он соответствовал пространству имен конфигурации миграции, и сборку с именем вашей сборки.

Сохраните и откройте мастер публикации, у вас будет этот флажок.

Надеюсь, что помощь

person Dominic St-Pierre    schedule 14.11.2012
comment
Привет, Доминик, спасибо за этот ответ. У меня была действительно странная проблема: без видимой причины Web Deploy и Entity Framework Power Tools перестали видеть файл DbContext. Я отредактировал, как вы показали, и это исправлено. Спасибо. - person Jon P Smith; 07.06.2013
comment
Это сработало для меня... только если я создал новую группу объектов. Она не добавлялась бы в группу объектов подключения по умолчанию. - person Mike; 01.10.2016
comment
Действительно, здесь важно использовать полное имя вашего класса DbContext в качестве имени вашей ObjectGroup. Спасибо ! - person Renaud Dumont; 09.11.2017

Я тоже видел такое. Я не уверен, какую эвристику используют средства развертывания для определения наличия 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

Надеюсь, это поможет.

person OdeToCode    schedule 06.11.2012

Позвольте мне взять удар и задать вопрос:

Был ли это ранее проект VS2010? :-)

Я спрашиваю, потому что процесс преобразования не работает, чтобы обновить VS2010 до VS2012 и сохранить нетронутыми профили публикации. Просто слишком много правок.

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

Однако сначала убедитесь, что правильный контекст EF указан в ответе Оды. Мастер публикации должен иметь возможность видеть ваш контекст, прежде чем создавать профили.

Первая миграция данных кода Entity Framework не работает с веб-развертыванием VS2012

person eduncan911    schedule 26.12.2012