我有一个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。
还可以使用MySqlServerVersion
或MariaDbServerVersion
类显式设置服务器版本。
是否可以从打开到数据库的连接以检索其版本的"自动检测"选项引发异常?我使用的是Pomelo.EntityFrameworkCore.MySql NuGet包,版本5.0.0
是的,这就是在您的案例中抛出异常的地方。否则,当DbContext
第一次需要数据库连接时(通常是在执行第一个查询时(,也就是在调用AddDbContext()
之后的某个时候,会抛出异常。