0

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

我注意到异常是AddDbContext在 Startup 类的方法内部引发的:

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

谢谢

4

1 回答 1

1

如果您想使用该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

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

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

是的,这就是在您的情况下引发异常的地方。否则,当第DbContext一个需要数据库连接时(通常在执行第一个查询时)会抛出异常,这是调用AddDbContext().

于 2021-06-22T12:43:38.270 回答