我正在尝试使用MySql on App(免费层(始终未启用))在Azure上的Web应用程序asp.net core 2.1上运行所有待处理的迁移,但是我收到错误消息,如日志文件中所示:>
"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。 我正在Startup类的Configure方法中运行以下代码:
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<SandroDbContext>())
{
context.Database.Migrate();
}
}
似乎可以从环境变量中为 App中的MySql 获取正确的服务器和端口,而不是数据库名称。
更新: 即使我删除代码行以应用迁移,它也不起作用。 简单地通过注入DbContext我有相同的错误。 可能是因为当Web应用启动时,应用中的Sql尚不可用。
答案 0 :(得分:0)
似乎问题出在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;
}