Entity Framework 6 中的 SQL 异常捕获器

SQL exception catcher in Entity Framework 6

提问人:swaggoo 提问时间:11/15/2023 最后编辑:marc_sswaggoo 更新时间:11/15/2023 访问量:44

问:

在 Entity Framework 6 中执行查询时,我需要捕获 SQL 异常。在 EF Core 中,有一个 and 它的方法。DbCommandInterceptorCommandFailed(DbCommand, CommandErrorEventData)

EF 6 是否有任何类似物,或者如何在 EF 6 中实现它?

C# SQL .NET 实体框架

评论

1赞 Panagiotis Kanavos 11/15/2023
为什么首先需要在 EF Core 或 EF Classic 中这样做?细节很重要。乐观并发异常需要逐个用例处理,而不是隐藏。集中式日志记录....NET Framework/EF 6 中没有,因此,如果需要泛型异常记录器,则必须将其应用于用于日志记录的任何库。
0赞 Panagiotis Kanavos 11/15/2023
EF 6 日志记录和拦截文档显示了 EF 6 中可用的日志记录和拦截功能。日志记录示例使用 IDbCommandInterceptor 和 NLog 来检查错误并记录它们
0赞 swaggoo 11/15/2023
@PanagiotisKanavos我需要在死锁受害者异常时重试。
0赞 Panagiotis Kanavos 11/15/2023
修复导致异常的 bug,而不是试图掩盖它。EF 使用乐观并发,这意味着死锁应该很少发生。读取数据后不会保留任何锁定甚至连接。保存更改不会读取数据。DbContext 是一个工作单元,它使用新的专用连接将所有挂起的更改保留在单个数据库事务中,这意味着死锁的可能性非常小。如果使用显式数据库事务,则会破坏 UoW 模式。
1赞 Panagiotis Kanavos 11/15/2023
如果确实需要在死锁时重试,请查看实现死锁异常的重试逻辑中的最新答案。EF 6 允许您指定重试执行策略。如果 EF 使用得当,则在其他一些代码以错误的顺序更新 EF 尝试更新的相同行之前,可能会出现死锁。在这种情况下,重试后可能会遇到并发错误。

答: 暂无答案