我有一个Azure Function应用程序。我已经启用了我的SQLin应用程序功能。我的函数是使用 EF Core 用 C# 编写的。尝试使用记录的MYSQLCONNSTR_localdb建立连接时,日志中出现异常。
这是我创建DBContext的代码:
public partial class MyContext : DbContext
{
public static MyContext Factory(string connectionString)
{
//String returned from MYSQLCONNSTR_localdb
//Database=localdb;Data Source=127.0.0.1:50249;User Id=azure;Password=****
var options = new DbContextOptionsBuilder<MyContext >()
.UseMySql(builder.ConnectionString)
.Options;
return new MyContext (options);
}
}
执行以下命令时,出现以下异常:引发了可能是由于暂时性故障导致的异常。考虑通过将"EnableRetryOnFailure(("添加到"UseMySql"调用来启用暂时性错误复原。
using var dbcontext = MyContext.Factory(settings.ConnectionString);
var result = dbcontext.Database.CanConnect();
问题是 Azure 提供的连接字符串错误:
Database=localdb;Data Source=127.0.0.1:50249;User Id=azure;Password=****
您无法更正格式并存储值,因为端口可能会更改。 据我所知,这是 Azure 服务的一个问题,已经存在了 2 年多。
此代码更正连接字符串:
var connectionString = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb")
public static MyContext Factory(string connectionString)
{
{
//WRONG: Database=localdb;Data Source=127.0.0.1:50249;User Id=azure;Password=****
//CORRECT: server=127.0.0.1;userid=azure;password=XXXX;database=localdb;Port=nnnnn
var builder = new System.Data.Common.DbConnectionStringBuilder();
builder.ConnectionString = connectionString;
object dataSource;
if (builder.TryGetValue("Data Source", out dataSource))
{
var parts = dataSource.ToString().Split(":");
builder.Remove("Data Source");
builder.Add("server", parts[0]);
builder.Add("Port", parts[1]);
}
var options = new DbContextOptionsBuilder<MyContext>()
.UseMySql(builder.ConnectionString)
.Options;
return new MyContext(options);
}