c# - EF Core 不会在 SaveChanges()/SaveChangesAsync() 上引发异常

标签 c# asp.net-core exception memory entity-framework-core

我有一个解决方案,其中包含数据层信息(所有模型和 dbContext)的项目被 Windows 服务项目和 ASP.NET MVC 应用引用,因为它们使用相同的数据结构。

最近,在处理 Windows 服务时,我注意到每当出现约束问题但没有抛出错误时,调试器中的内存使用量很大。当我对其进行故障排除时,我意识到方法 SaveChanges()SaveChangesAsync() 永远不会抛出任何类型的异常,因此我无法在 try/catch block 中捕获异常.我可以在输出窗口中看到错误“执行 DbCommand 失败...”,但程序将继续在 DbContext 中运行一些循环,并且内存使用量将以每秒 500MB 的速度增加,并且会上升到最大可用量而不会导致应用程序崩溃。

我设法记录了使用不存在的 FK 创建新位置条目的跟踪日志,并且似乎在 dbContext 中发生错误后,EF 开始对 DbContext 中定义的每个 DBSet 进行“选择”查询,并开始跟踪选择查询中的每个实体结果。您可以在下面看到登录图片的那部分...

enter image description here

我尝试使用 EF Core 创建新的 ASP.NET MVC 项目,但无法在干净的项目上重现此问题,因此此问题可能出在配置或类似问题上。

整个解决方案最初是在 .NET Framework 4.5 上启动的,后来转换(重写)到 .NET Core 3.1,最后更新到 .NET 5。数据层在 .NET Core 3.1 版本上从 MVC 项目中提取到单独的项目中,当时需要windows服务。我已经将每个包更新到最新版本,我为 DbContext 和日志记录解决方案尝试了不同的配置选项,但没有任何改变。我可以通过为任何模型的约束手动设置错误的 ID 来重现此问题,因此它与特定模型或验证无关。不幸的是,当这种行为成为解决方案中的一件事时,我无法确定确切的时间......

有谁知道可能导致此行为的原因或从哪里开始进行故障排除?

最佳答案

与 EF Core 一起使用时,这是 Serilog.Exceptions 的一个众所周知的问题,请参阅此处的详细文档:https://github.com/RehanSaeed/Serilog.Exceptions#serilogexceptionsentityframeworkcore

关于c# - EF Core 不会在 SaveChanges()/SaveChangesAsync() 上引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67622692/

相关文章:

python - Python 中 protected 方法调用?

c++ - 如何在不同线程中处理同一个套接字?

asp.net - 无法在 IIS Express 中启动 asp.net core web 应用程序

c# - UseStatusCodePagesWithReExecute 不适用于禁止 (403)

c# - 对于具有 12K+ 类的 C# 解决方案,SonarQube 报告没有依赖项、0 缠结索引?

c# - 如何检查 MemoryStream 是否可以在 .NET 中转换为位图?

c# - Asp.Net Core 自定义认证中间件方案

c# - 在写入/读取 c# mongodb 时加密/解密属性

c++ - 如何处理或避免 C++11 <regex> 匹配函数的异常(§28.11)?

javascript - 通过后端c#在javascript文件中设置数据