ASP.NET核心:在控制器内部截获DbContext连接超时异常



我有一个ASP.NET Core MVC应用程序,在其中我将DbContext注入控制器。我想知道在构造返回特定错误响应代码的DbContext时,是否有方法拦截连接超时异常。

我注意到异常是在Startup类的方法AddDbContext中抛出的:

services.AddDbContext<MyDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("DefaultConnection"),
ServerVersion.AutoDetect(Configuration.GetConnectionString("DefaultConnection")), o => 
{
o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
});
});

EDIT:是否可以从自动检测选项引发异常,该选项打开到数据库的连接以检索其版本?我使用的是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()的一些重试逻辑,请查看ServerVersion.AutoDetects((#1368的Missing retry policy。

还可以使用MySqlServerVersionMariaDbServerVersion类显式设置服务器版本。

是否可以从打开到数据库的连接以检索其版本的"自动检测"选项引发异常?我使用的是Pomelo.EntityFrameworkCore.MySql NuGet包,版本5.0.0

是的,这就是在您的案例中抛出异常的地方。否则,当DbContext第一次需要数据库连接时(通常是在执行第一个查询时(,也就是在调用AddDbContext()之后的某个时候,会抛出异常。

最新更新