我有一个解决方案,其中包含数据层信息(所有模型和 dbContext)的项目由 Windows 服务项目和 ASP.NET MVC 应用程序引用,因为它们使用相同的数据结构。
最近,在处理 Windows 服务时,我注意到当存在约束问题但没有抛出错误时,调试器中会使用大量内存。当我对其进行故障排除时,我意识到方法SaveChanges()并SaveChangesAsync()不会抛出任何类型的异常,因此我无法在 try/catch 块中捕获异常。我可以在输出窗口中看到错误“执行 DbCommand 失败...”,但程序将继续在 DbContext 中运行某个循环,并且内存使用量将以每秒 500MB 的速度增加,并且会升至最大可用值,而不会导致应用程序崩溃。
我设法记录了使用不存在的 FK 创建新位置条目的跟踪日志,并且似乎在 dbContext 中发生错误后,EF 对 DbContext 中定义的每个 DBSet 启动“选择”查询,并开始跟踪选择查询结果中的每个实体。您可以在下面看到登录图片的部分...
我尝试使用 EF Core 创建新的 ASP.NET MVC 项目,但无法在干净的项目上重现此问题,因此此问题可能是在配置或类似的问题中。
整个解决方案最初始于 .NET Framework 4.5,后来转换(重写)到 .NET Core 3.1,最后更新到 .NET 5。当 Windows 服务发布时,数据层从 .NET Core 3.1 版本上的 MVC 项目中提取到单独的项目中。需要。我已将每个包更新到最新版本,我尝试了 DbContext 和日志记录解决方案的不同配置选项,但没有任何变化。我可以通过手动为任何模型上的约束设置错误的 ID 来重现此问题,因此它与特定模型或验证无关。不幸的是,我无法确定这种行为何时成为解决方案的确切时间......
有谁知道导致此行为的原因是什么或从哪里开始对其进行故障排除?