Asp.net core 当SQL连接失败时,启动ASP.NET核心应用程序的正确方法是什么

Asp.net core 当SQL连接失败时,启动ASP.NET核心应用程序的正确方法是什么,asp.net-core,Asp.net Core,我有一个按需启动的ASP.NEt core 2.1服务器。所以当有人进入网页时。我的SQL server位于web服务器以外的其他位置,有时SQL server无法启动和运行。因此,我需要在没有SQL server的情况下优雅地启动web服务器。但是,它当然会首先尝试连接到SQL server 这在ASP.NET Core 1.1中以某种方式起作用,但现在在2.1中我得到了异常InvalidOperationException:没有为此DbContext配置数据库提供程序 我使用的是动态连接字符

我有一个按需启动的ASP.NEt core 2.1服务器。所以当有人进入网页时。我的SQL server位于web服务器以外的其他位置,有时SQL server无法启动和运行。因此,我需要在没有SQL server的情况下优雅地启动web服务器。但是,它当然会首先尝试连接到SQL server

这在ASP.NET Core 1.1中以某种方式起作用,但现在在2.1中我得到了异常InvalidOperationException:没有为此DbContext配置数据库提供程序

我使用的是动态连接字符串,我有一个函数,它要么返回连接字符串,要么返回其他一些信息(比如之前是否检测到故障)

protectedoverride void onconfiguration(DbContextOptionsBuilder optionsBuilder)
{
string connectionString=getConnectionString();
尝试
{
基本配置(选项生成器);
如果(连接字符串!=“失败”)
{
选项生成器
.EnableSensitiveDataLogging(真)
.ReplaceService()
.UseSqlServer(connectionString);
}
其他的
{
选项生成器
.EnableSensitiveDataLogging(真)
.ReplaceService();
}
}
捕获(例外情况除外)
{
设置连接状态(连接状态故障,例如消息);
返回;
}
}
}

因此,如果我知道连接将失败,或者我可以在异常处理程序中执行某些操作,那么我需要在这个onconfigurang方法中执行哪些操作?

这个问题似乎不再有效。最新的.Net core SDK(2.1.700)和.Net core运行时(2.1.11)似乎包含修复此问题的内容。此问题似乎不再有效。最新的.Net core SDK(2.1.700)和.Net core运行时(2.1.11)似乎包含了修复此问题的内容。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string connectionString = getConnectionString();
        try
        {
            base.OnConfiguring(optionsBuilder);
            if (connectionString != "failure")
            {
                optionsBuilder
                    .EnableSensitiveDataLogging(true)
                    .ReplaceService<IMigrationsAnnotationProvider, CustomAnnotationProvider>()
                    .UseSqlServer(connectionString);
            }
            else
            {
                optionsBuilder
                    .EnableSensitiveDataLogging(true)
                    .ReplaceService<IMigrationsAnnotationProvider, CustomAnnotationProvider>();
            }
        }
        catch (Exception ex)
        {
            setConnectionStatus(CONNECTION_STATUS_FAILURE, ex.Message);
            return;
        }
    }
}