Я пытаюсь запустить все ожидающие миграции на моем веб-приложении asp.net core 2.1 на Azure, используя MySql on App, свободный уровень (всегда включен не включен), но я получаю сообщение об ошибке, как в файле журнала:
"Microsoft.EntityFrameworkCore.Database.Connection: An error occurred using the connection to database '' on server '127.0.0.1:54184'"
Я использую mysql-пакет Pomelo.EntityFrameworkCore.MySql, версия 2.1.1. Я запускаю этот код в методе Configure класса Startup:
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<SandroDbContext>())
{
context.Database.Migrate();
}
}
Кажется, что правильный сервер и порт получают из переменной среды для MySql в приложении, но не с именем базы данных.
UPDATE: он не работает, даже если я удаляю строки кода для применения миграции. Просто путем ввода DbContext у меня такая же ошибка. Возможно, это связано с тем, что при запуске веб-приложения приложение Sql в App еще не доступно.
Кажется, проблема связана с строкой соединения, которую Azure предоставляет через переменную среды. Он пропускает параметр "Порт", поскольку порт находится рядом с именем сервера, но строка подключения недействительна таким образом. Я сделал несколько строк кода, чтобы исправить это.
public string FixAzureConnectionString(string connStr)
{
string goodConnStr = connStr;
string portNumber = Regex.Match(goodConnStr, @"(?<=Data Source.+:)\d+")?.Value;
goodConnStr += ";Port=" + portNumber;
goodConnStr = goodConnStr.Replace(":" + portNumber, "");
return goodConnStr;
}