Миграция модели в таблицу Azure автоматически .Net CORE - PullRequest
0 голосов
/ 18 марта 2019

Я использую Entity Framework .Net CORE 2.2 для своих моделей баз данных, а в своем коде я использую

public void Configure(IApplicationBuilder app, IHostingEnvironment env, MyContextModel MyContext) {
[snipped for clarity]
MyContext.Database.Migrate();
}

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

"An error occurred while starting the application."

в окне браузера и таблицы остаются без изменений. Я удалил и переиздал без MyContext.Database.Migrate();, и сайт запускается нормально, так что я уверен, что это связано с автоматической миграцией, которая вызывает проблему. Я погуглил и попытался поставить линию в DbInitializer и других местах, но без удачи.

Я проверил Cloud Explorer и вошел в систему, поэтому проблем с разрешениями нет.

Есть идеи, что мне не хватает или как (и как) мне читать какой-то журнал Azure?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Нет способа запустить миграцию в Entity Framework CORE. Еще несколько месяцев назад у опции публикации в Visual Studio был флажок «выполнить миграции», но теперь этого нет.

Вы можете попробовать запустить

dotnet ef database update

или какой-то подобный скрипт для сервера, но это вернуло слишком много ошибок, чтобы упомянуть Поэтому вместо этого я попытался сгенерировать сценарии SQL, которые будут выполняться по принципу

dotnet ef migrations script

с различными переключателями и прочее, но это привело к различным ошибкам. В конце концов я нашел это.

Script-Migration -from 20190306131332_migration1 -o fileName.sql

, который успешно генерирует SQL для запуска вручную с базой данных.

-from 

- последний запуск миграции, поэтому, если я хочу получить все изменения с момента миграции1 (т.е. миграция2, миграция3 и т. Д.), Миграция1 является критерием -from

Это создаст файл с именем filename.sql в корневом каталоге, в котором находится файл .sln.

0 голосов
/ 19 марта 2019

Этот подход (MyContext.Database.Migrate();) не для всех. Хотя отлично подходит для приложений с локальной базой данных , большинству приложений потребуется более надежная стратегия развертывания, например, создание сценариев SQL.

При развертывании на Azure вы можете добавить следующий код в метод Configure Startup.cs

using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
    scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...