【发布时间】:2021-09-02 09:14:54
【问题描述】:
我有一个 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);
});
});
编辑:是否可以从打开与数据库的连接以检索其版本的 AutoDetect 选项引发异常?我正在使用 Pomelo.EntityFrameworkCore.MySql NuGet 包,版本 5.0.0
谢谢
【问题讨论】:
-
你为什么要那个? DbContext 不是一个连接,它是一个工作单元。它在断开连接的情况下工作,并且仅在加载数据时打开一个短暂的连接,或者在调用
SaveChanges时保留所有缓存的更改。如果要捕获超时异常,请使用ToList或SaveChangescals 周围的正常异常处理块 -
另外,您可以实现命令拦截器和/或执行策略。此特定链接适用于 SQL Server,但基础架构适用于所有数据库类型:docs.microsoft.com/en-us/dotnet/architecture/microservices/…
-
@PanagiotisKanavos 我认为这里的问题是用于检测 MySql 实例的运行版本的 AutoDetect 选项。在幕后,它打开与数据库的连接以检索其版本。那么,也许问题是:如何拦截这个超时?
标签: c# exception entity-framework-core asp.net-core-mvc pomelo-entityframeworkcore-mysql