Код Asp.Net EF Первая непрерывная интеграция с VSTS — Azure Sql Db не развертывается

У меня возникли проблемы с запуском миграции для создания/обновления базы данных Sql, размещенной в Azure. Они отлично работают локально в моем LocalDb, но, похоже, полностью игнорируются при выпуске в Azure.

Подробности: - Asp.Net MVC 5.2.3 - Entity Framework 6.1.3 - Visual Studio Team Services (онлайн) - Azure Web App и Azure SQL Db (по подписке Imagine/Dreamspark)

Я создал другое приложение, которое не использовало CI, но использовало функцию публикации в Visual Studio, и оно нормально публиковалось и работало. С тех пор я удалил это веб-приложение и базу данных из Azure, поскольку подписка позволяет использовать только одну базу данных.

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

Я пытался:

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

Мои текущие шаги сборки включают:

  1. Восстановление NuGet — установщик NuGet
  2. Решение для сборки — сборка Visual Studio
  3. Тестовые сборки — тест Visual Studio
  4. Путь публикации символов — индексирование источников и публикация символов
  5. Опубликовать артефакт — опубликовать артефакты сборки

В моей локальной среде EF работает, когда я включаю миграцию, добавляю миграцию, обновляю базу данных. Я предполагаю, что ни один из вышеперечисленных шагов не делает этого, поэтому мне нужен один или несколько шагов. Похоже, что блог Бена Дэя должен работать, но по какой-то причине он не находит мой файл bin/release.

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

Что мне не хватает?

Спасибо.

**Редактировать - нашел простой элемент, которого мне не хватало. Мне нужно добавить строку подключения для базы данных в веб-приложение в Azure. Теперь у него есть мои исходные таблицы, и он хранит данные с использованием этих таблиц, но не принимает миграции. Итак, то, что я сделал за последние два дня, вывело мои первоначальные таблицы. Теперь.. чтобы вспомнить, что это было.

** 2-е редактирование. Итак, я думаю, что таблицы попали в базу данных выпуска до того, как я исправил свою строку подключения в VSTS. Одна из вещей, которые я пробовал, заключалась в создании отдельного проекта базы данных. Я думаю, когда я в какой-то момент нажал это, существующие в то время таблицы также были выпущены, я просто не мог их видеть, потому что я не соединил приложение и БД вместе? Во всяком случае, миграции EF до сих пор не распознаются. Я снова попробовал предложение Бена Дэя, но получаю ошибку сборки:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

Я использую EF 6.1.3


comment
Как выглядит ваша папка bin? у вас есть сборки EF на выходе? (Скопировать локальное в истинное)   -  person baywet    schedule 13.02.2017
comment
Моя папка bin на моем локальном компьютере не имеет папки выпуска (это означает, что я думаю, что ее нет и в VSTS, и на этом этапе она не удалась), поэтому для шага, который ищет конфигурацию выпуска, я указал ее на папка obj (в которой есть папки отладки и выпуска) — это позволило процессу, описанному Беном, пройти этот шаг. Да, для EF установлено значение «Копировать локально» — true.   -  person user2951579    schedule 14.02.2017
comment
Я думаю, вы должны убедиться, что у вас есть шаги публикации артефактов сборки, нацеленные на промежуточный каталог в конце определения сборки. Затем вы можете снова запустить сборку и экспортировать текстовую версию дерева файлов, которое у вас есть? -file -dir-файл   -  person baywet    schedule 15.02.2017


Ответы (1)


Я тоже столкнулся с этим. Я использовал Visual Studio для публикации службы приложений Azure. Проведя небольшое исследование (https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/migrations-and-развертывание-с-структурой-объекта-в-an-asp-net-mvc-application#deploy-to-azure), я узнал, что VS Publish преобразует вашу веб-конфигурацию, когда вы устанавливаете флажок «Обновить базу данных» в настройках публикации, добавляя строку подключения, которая ссылается на базу данных, содержащую вашу таблицу _migrations, а также элемент «контексты» в «entityFramework». Вы можете увидеть, что предыдущая публикация сделала с вашим файлом web.config, просмотрев "..obj\Release\InsertEFCodeFirstDeploy\transformed\web.config".

Поэтому, чтобы воссоздать это же действие при использовании определения сборки и выпуска в VSTS, я добавил 2 преобразования «вставка» XDT в Web.Release.config в моем сервисном проекте. Мой выглядит так:

<?xml version="1.0"?>
<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MS_TableConnectionString_DatabasePublish" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AzureStorageEmulatorDb45;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True" 
         providerName="System.Data.SqlClient" xdt:Transform="Insert" />
  </connectionStrings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
  <entityFramework>
    <contexts xdt:Transform="Insert">
      <context type="helpmeshopService.Models.helpmeshopContext, helpmeshopService">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[helpmeshopService.Models.helpmeshopContext, helpmeshopService], [helpmeshopService.Migrations.Configuration, helpmeshopService]], EntityFramework, PublicKeyToken=b77a5c561934e089">
          <parameters>
            <parameter value="MS_TableConnectionString_DatabasePublish" />
          </parameters>
        </databaseInitializer>
      </context>
    </contexts>
  </entityFramework>
</configuration>

Затем вам нужно будет перейти в «Настройки приложения» службы приложений на портале Azure и добавить строку подключения с именем «MS_TableConnectionString_DatabasePublish» и установить для нее то же значение, что и для «MS_TableConnectionString», которое уже должно существовать в вашем настройки.

person user10018238    schedule 01.07.2018