【问题标题】:StackOverflow error when calling DataContext.SubmitChanges()调用 DataContext.SubmitChanges() 时出现 StackOverflow 错误
【发布时间】:2016-02-15 21:35:25
【问题描述】:

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

“System.Data.Linq.dll 中发生了“System.StackOverflowException”类型的未处理异常”

任何致电DataContext.SubmitChanges()

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

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

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

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

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

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

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

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

有没有办法调试这个问题?

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

【问题讨论】:

  • 它是特定于一个上下文类还是更多?
  • @GertArnold,不,不特定于任何上下文类。对 SubmitChanges() 的任何调用都会引发异常。改变什么数据库实体无关紧要。
  • 如果您连接到 Linqpad 中的数据库(在后台使用 LINQ to SQL)怎么办?
  • 当 SO 发生时,您可以附加调试器并查看调用堆栈窗口吗?
  • @usr: 是的,我在 Visual Studio 中运行它,所以我不需要附加调试器,我在异常发生时添加了调用堆栈的图片。

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


【解决方案1】:

在这种情况下,令人不满意的“答案”是删除 *.dbml 文件并重新创建它。这修复了堆栈溢出错误。

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

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

【讨论】:

    【解决方案2】:

    非常感谢汤姆提供的信息!

    以防其他人遇到同样的问题,这里是我案例中的额外信息。我的电脑昨天更新了一批Windows后,我也遇到了一个非常相似的问题,更新包括windows10 OS,VS2013/VS2015等。我主要使用VS2013,与Tom的情况有些不同,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多