调用 DataContext.SubmitChanges() 时发生 StackOverflow 错误
StackOverflow error when calling DataContext.SubmitChanges()
在混合 asp.net 网络应用程序中,框架 4.5.1,使用 LINQ 到 SQL(不是 Entity Framework)我得到异常
"An unhandled exception of type 'System.WhosebugException' occurred in System.Data.Linq.dll"
对 DataContext.SubmitChanges()
.
的任何调用
每次调用 SubmitChanges() 都会导致错误,具体更改的实体无关紧要。错误会立即抛出(与大多数 Whosebug 异常不同,后者通常需要几秒钟才能在 er运行t 代码溢出堆栈时发生)。
asp.net Web 应用程序 运行 在我的 IIS Express 本地主机上使用 Visual Studio 2013。数据库是 SQL Server 2005。
我的问题是,如何在这种环境中调试 Whosebug 异常?现在上面的错误消息是我得到的。
- The Event Viewer notes that the browser crashed (it happens in both IE 11 and Chrome) but nothing about the LINQ to SQL exception.
- The SQL Server process monitor does not register any database call.
- I have a log hooked up to my DataContext but it records nothing.
似乎堆栈溢出发生在 System.Data.dll
内部,发生在任何数据库调用发生之前和任何内容被记录之前。
这在几个小时前突然开始发生,在 windows 更新 运行 并且机器重新启动之后。这可能是巧合。
还有一件非常奇怪的事情:我们店里有四个开发人员,都使用 Visual Studio 2013。我们两个人突然开始遇到这个问题,而且我们两个人从来没有遇到过。我们都是 运行 相同的代码并访问相同的数据库。我们两个人都重启了,一台机器上问题消失了,我的机器上还是这样。
除了重新启动之外,我还从机器上删除了该项目并将其从源代码管理中拉下来,以便它与我的 3 个同事拥有的相同,删除了我机器上的所有临时 Internet 文件,并删除了我所有的 AppData\Local\temp 文件用于我的登录。
有什么办法可以调试这个问题吗?
发生异常时调用堆栈的剪辑(对VisitExpression等的调用重复数十次直到结束)。
本例中不令人满意的 "answer" 是删除 *.dbml 文件并重新创建它。这修复了堆栈溢出错误。
我上面回复@GertArnold 的评论不准确。只有一个 DataContext 抛出堆栈溢出异常。它正在为 DataContext 中的每个实体执行此操作,但应用程序中的其他 DataContext 工作正常。
这个特殊的 *.dbml 文件多年来一直在增长,变得非常庞大。在重新创建时,我小心翼翼地只添加了被引用的数据库对象,这导致了一个更小的 *.dbml 文件,它本身可能已经解决了问题。
非常感谢汤姆提供的信息!
为了防止其他人遇到同样的问题,这里是我案例的额外信息。我的电脑昨天得到了一批Windows更新后,我遇到了一个非常相似的问题,这些更新包括windows10、OS、VS2013/VS2015等。我主要使用VS2013,一些与汤姆的情况不同的是,
- 仅在更新一个实体时弹出,同一 DataContext 中的其他实体可以正常工作
- 只影响我的 ASP.NET Web API 项目,控制台应用程序很好,甚至所有应用程序项目都引用同一个 unitofwork 数据层项目(在 dbml 文件所在的位置)
- 替换 dbml 文件对我不起作用,我最终通过在 VS2015 中打开解决方案 >> 调试 >> 关闭 VS2015 >> 在 VS2013 中打开解决方案解决了问题,问题就消失了
在混合 asp.net 网络应用程序中,框架 4.5.1,使用 LINQ 到 SQL(不是 Entity Framework)我得到异常
"An unhandled exception of type 'System.WhosebugException' occurred in System.Data.Linq.dll"
对 DataContext.SubmitChanges()
.
每次调用 SubmitChanges() 都会导致错误,具体更改的实体无关紧要。错误会立即抛出(与大多数 Whosebug 异常不同,后者通常需要几秒钟才能在 er运行t 代码溢出堆栈时发生)。
asp.net Web 应用程序 运行 在我的 IIS Express 本地主机上使用 Visual Studio 2013。数据库是 SQL Server 2005。
我的问题是,如何在这种环境中调试 Whosebug 异常?现在上面的错误消息是我得到的。
- The Event Viewer notes that the browser crashed (it happens in both IE 11 and Chrome) but nothing about the LINQ to SQL exception.
- The SQL Server process monitor does not register any database call.
- I have a log hooked up to my DataContext but it records nothing.
似乎堆栈溢出发生在 System.Data.dll
内部,发生在任何数据库调用发生之前和任何内容被记录之前。
这在几个小时前突然开始发生,在 windows 更新 运行 并且机器重新启动之后。这可能是巧合。
还有一件非常奇怪的事情:我们店里有四个开发人员,都使用 Visual Studio 2013。我们两个人突然开始遇到这个问题,而且我们两个人从来没有遇到过。我们都是 运行 相同的代码并访问相同的数据库。我们两个人都重启了,一台机器上问题消失了,我的机器上还是这样。
除了重新启动之外,我还从机器上删除了该项目并将其从源代码管理中拉下来,以便它与我的 3 个同事拥有的相同,删除了我机器上的所有临时 Internet 文件,并删除了我所有的 AppData\Local\temp 文件用于我的登录。
有什么办法可以调试这个问题吗?
发生异常时调用堆栈的剪辑(对VisitExpression等的调用重复数十次直到结束)。
本例中不令人满意的 "answer" 是删除 *.dbml 文件并重新创建它。这修复了堆栈溢出错误。
我上面回复@GertArnold 的评论不准确。只有一个 DataContext 抛出堆栈溢出异常。它正在为 DataContext 中的每个实体执行此操作,但应用程序中的其他 DataContext 工作正常。
这个特殊的 *.dbml 文件多年来一直在增长,变得非常庞大。在重新创建时,我小心翼翼地只添加了被引用的数据库对象,这导致了一个更小的 *.dbml 文件,它本身可能已经解决了问题。
非常感谢汤姆提供的信息!
为了防止其他人遇到同样的问题,这里是我案例的额外信息。我的电脑昨天得到了一批Windows更新后,我遇到了一个非常相似的问题,这些更新包括windows10、OS、VS2013/VS2015等。我主要使用VS2013,一些与汤姆的情况不同的是,
- 仅在更新一个实体时弹出,同一 DataContext 中的其他实体可以正常工作
- 只影响我的 ASP.NET Web API 项目,控制台应用程序很好,甚至所有应用程序项目都引用同一个 unitofwork 数据层项目(在 dbml 文件所在的位置)
- 替换 dbml 文件对我不起作用,我最终通过在 VS2015 中打开解决方案 >> 调试 >> 关闭 VS2015 >> 在 VS2013 中打开解决方案解决了问题,问题就消失了