EF Core 不会在 SaveChanges()/SaveChangesAsync() 上引发异常
EF Core doesn't throw exceptions on SaveChanges()/SaveChangesAsync()
我有解决方案,其中包含数据层信息(所有模型和 dbContext)的项目被 windows 服务项目和 ASP.NET MVC 应用引用,因为它们使用相同的数据结构。
最近在处理 windows 服务时,我注意到每当出现约束问题但未抛出任何错误时,调试器都会使用大量内存。当我对其进行故障排除时,我意识到方法 SaveChanges()
和 SaveChangesAsync()
从不抛出任何类型的异常,因此我无法在 try/catch 块中捕获异常。我可以在输出 window 中看到错误“Failed executing DbCommand...”,但程序会继续 运行 DbContext 中的某个循环,内存使用量会以每秒 500MB 的速度增加,并会上升到最大可用没有崩溃的应用程序。
我设法记录了使用不存在的 FK 创建新位置条目的跟踪日志,似乎在 dbContext EF 中发生错误后开始“Select”查询 DbContext 中定义的每个 DBSet 并开始跟踪对于 select 查询结果中的每个实体。您可以在下面看到登录图片的那部分...
我尝试使用 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
我有解决方案,其中包含数据层信息(所有模型和 dbContext)的项目被 windows 服务项目和 ASP.NET MVC 应用引用,因为它们使用相同的数据结构。
最近在处理 windows 服务时,我注意到每当出现约束问题但未抛出任何错误时,调试器都会使用大量内存。当我对其进行故障排除时,我意识到方法 SaveChanges()
和 SaveChangesAsync()
从不抛出任何类型的异常,因此我无法在 try/catch 块中捕获异常。我可以在输出 window 中看到错误“Failed executing DbCommand...”,但程序会继续 运行 DbContext 中的某个循环,内存使用量会以每秒 500MB 的速度增加,并会上升到最大可用没有崩溃的应用程序。
我设法记录了使用不存在的 FK 创建新位置条目的跟踪日志,似乎在 dbContext EF 中发生错误后开始“Select”查询 DbContext 中定义的每个 DBSet 并开始跟踪对于 select 查询结果中的每个实体。您可以在下面看到登录图片的那部分...
我尝试使用 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