ASP.NET核心:拦截controller内部的DbContext连接超时异常
ASP.NET Core : intercept DbContext connection timeout exception inside controller
我有一个 ASP.NET 核心 MVC 应用程序,我将 DbContext
注入到控制器中。我想知道有没有办法在构造DbContext
返回特定错误响应码时拦截连接超时异常
我注意到 Startup class:
中的方法 AddDbContext
中抛出了异常
services.AddDbContext<MyDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("DefaultConnection"),
ServerVersion.AutoDetect(Configuration.GetConnectionString("DefaultConnection")), o =>
{
o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
});
});
编辑:是否可以从 AutoDetect 选项中抛出异常,该选项打开与数据库的连接以检索其版本?我正在使用 Pomelo.EntityFrameworkCore.MySql NuGet 包,版本 5.0.0
谢谢
如果您想使用 ServerVersion.AutoDetect()
方法自动获取您的数据库服务器版本,那么您通常只想在应用程序启动时查询一次,然后在您的 UseMySql()
调用中重新使用它:
var connectionString = Configuration.GetConnectionString("DefaultConnection");
var serverVersion = ServerVersion.AutoDetect(connectionString);
services.AddDbContext<MyDbContext>(options => options
.UseMySql(connectionString, serverVersion, o => o
.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)));
此外,如果您想要 ServerVersion.AutoDetect()
的一些重试逻辑,请查看 Missing retry policy for ServerVersion.AutoDetect() #1368。
您还可以使用 MySqlServerVersion
或 MariaDbServerVersion
类.
显式设置您的服务器版本
Could the exception be thrown from the AutoDetect option which opens a connection to the DB to retrieve its version? I'm using the Pomelo.EntityFrameworkCore.MySql NuGet package, version 5.0.0
是的,这就是您的情况抛出异常的地方。否则,当 DbContext
第一次需要数据库连接时(通常是在您执行第一个查询时),会在稍后的某个时间 after 调用 AddDbContext()
时抛出异常.
我有一个 ASP.NET 核心 MVC 应用程序,我将 DbContext
注入到控制器中。我想知道有没有办法在构造DbContext
返回特定错误响应码时拦截连接超时异常
我注意到 Startup class:
中的方法AddDbContext
中抛出了异常
services.AddDbContext<MyDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("DefaultConnection"),
ServerVersion.AutoDetect(Configuration.GetConnectionString("DefaultConnection")), o =>
{
o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
});
});
编辑:是否可以从 AutoDetect 选项中抛出异常,该选项打开与数据库的连接以检索其版本?我正在使用 Pomelo.EntityFrameworkCore.MySql NuGet 包,版本 5.0.0
谢谢
如果您想使用 ServerVersion.AutoDetect()
方法自动获取您的数据库服务器版本,那么您通常只想在应用程序启动时查询一次,然后在您的 UseMySql()
调用中重新使用它:
var connectionString = Configuration.GetConnectionString("DefaultConnection");
var serverVersion = ServerVersion.AutoDetect(connectionString);
services.AddDbContext<MyDbContext>(options => options
.UseMySql(connectionString, serverVersion, o => o
.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)));
此外,如果您想要 ServerVersion.AutoDetect()
的一些重试逻辑,请查看 Missing retry policy for ServerVersion.AutoDetect() #1368。
您还可以使用 MySqlServerVersion
或 MariaDbServerVersion
类.
Could the exception be thrown from the AutoDetect option which opens a connection to the DB to retrieve its version? I'm using the Pomelo.EntityFrameworkCore.MySql NuGet package, version 5.0.0
是的,这就是您的情况抛出异常的地方。否则,当 DbContext
第一次需要数据库连接时(通常是在您执行第一个查询时),会在稍后的某个时间 after 调用 AddDbContext()
时抛出异常.