调用DataContext.SubmitChanges()时出现StackOverflow错误

时间:2016-02-15 21:35:25

标签: asp.net sql-server linq-to-sql stack-overflow

在混合的asp.net Web应用程序框架4.5.1中,使用LINQ to SQL(非实体框架)我得到了异常

  

"未处理的类型' System.StackOverflowException'发生在System.Data.Linq.dll"

DataContext.SubmitChanges()的任何电话。

每次调用SubmitChanges()都会导致错误,更改哪个特定实体无关紧要。立即抛出错误(与大多数StackOverflow异常不同,这些异常通常在错误代码溢出堆栈时发生几秒钟)。

asp.net Web应用程序使用Visual Studio 2013在IIS Express中的本地主机上运行。数据库是SQL Server 2005.

我的问题是,如何在此环境中调试StackOverflow异常?现在,上面的错误信息就是我得到的。

  
      
  1. 事件查看器注意到浏览器崩溃(它发生在IE 11和Chrome中),但没有关于LINQ to SQL异常。
  2.   
  3. SQL Server进程监视器不会注册任何数据库调用。
  4.   
  5. 我有一个连接到我的DataContext的日志,但它没有记录任何内容。
  6.   

在发生任何数据库调用之前以及可记录任何内容之前,似乎堆栈溢出发生在System.Data.dll内。

在Windows更新运行并且机器重新启动后,几个小时前突然开始发生这种情况。这可能是巧合。

其他一些非常奇怪的事情:我们的商店里有四个开发人员,都使用Visual Studio 2013.我们两个人突然开始遇到这个问题,我们两个人从来没有过。我们都运行相同的代码并点击相同的数据库。我们两个问题重新启动,问题在一台机器上消失了,但我的机器上仍然出现问题。

除了重新启动之外,我还从机器中删除了项目并将其从源代码管理中删除,以便它与我的3位同事所拥有的相同,删除了我机器上的所有临时Internet文件,并删除了我登录的所有AppData \ Local \ temp文件。

有没有办法调试此问题?

发生异常时调用堆栈的剪辑(对VisitExpression等的调用会重复几十次,直到结束)。

enter image description here

2 个答案:

答案 0 :(得分:0)

不满意的答案"在这种情况下,删除* .dbml文件并重新创建它。这解决了堆栈溢出错误。

我在回复@GertArnold上面的评论不准确。只有一个DataContext抛出了堆栈溢出异常。它正在为DataContext中的每个实体执行此操作,但应用程序中的其他DataContexts正常工作。

这个特殊的* .dbml文件多年来一直在增长到庞大的规模。在重新创建的时候,我小心地只添加了被引用的数据库对象,这导致了一个小得多的* .dbml文件,这本身可能已经解决了这个问题。

答案 1 :(得分:0)

非常感谢Tom提供的信息!

以防万一其他人可能遇到同样的问题,这是我案例的额外信息。我的电脑昨天获得了一批Windows更新,包括windows10操作系统,VS2013 / VS2015等等,我有一个非常类似的问题。我主要使用VS2013,与Tom的情况有些不同,

  1. 只有在更新一个实体时才弹出,同一个DataContext中的其他实体正常工作
  2. 只影响我的ASP.NET Web API项目,控制台应用程序很好,甚至所有应用程序项目都引用相同的unitofwork数据层项目(dbml文件所在的位置)
  3. 替换dbml文件对我没有用,我终于通过在VS2015中打开解决方案>>来解决它了。调试>>关闭VS2015>>在VS2013中打开解决方案,问题就消失了