LINQ to SQL - 已经有一个与此命令关联的开放数据读取器,必须先将其关闭

发布于 2024-09-14 00:11:41 字数 347 浏览 1 评论 0原文

最近,我在 ASP.Net 项目的静态类中实现了 Linq to SQL,该类是一个实用程序类,用于获取有关站点负载的一些信息。当我使用静态 linqtosql datacontext 时,我仅在实时环境中遇到上述错误,但从未在 UAT 或 QA 站点上遇到该问题。 (这意味着只有在负载很大时才会出现此问题)。

所以我在谷歌上搜索了一下,在这里找到了这篇文章。所以我所做的就是创建页面级数据上下文变量,并在每次调用它们时将它们传递给静态方法。我所做的是正确的,这会解决这个问题吗?/

Recently i implemented Linq to SQL in a static class in my ASP.Net project which is a utility class to get some information on site load. when i used the static linqtosql datacontext i got the above error only in the live environment but never got that issue on UAT, or QA sites. ( this means this issue only happens when there is a much of a load).

so i googled around and found this article here. so what i did was i made my page level datacontext variables and passed them to the static methods every time i call them. is what i did was correct, will that resolve this issue ?/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

她比我温柔 2024-09-21 00:11:41

在 ASP.Net 中,每个请求都是一个单独的线程。因此,如果您使用静态资源,则必须处理并发性。在您的情况下,似乎两个数据读取器正在使用相同的连接。由于您的类是静态的,因此当服务器负载较重时,可能会发生两个请求同时使用相同的数据上下文的情况。

如果您确实需要静态资源,则应该使用锁定语句确保同一时间只有一个请求访问该资源。

In ASP.Net each request is a separate thread. So if you are using a static resource you must handle the concurrency. In your case it seems that two datareaders are using the same connection. As your class is static, when the server is under heavy load it can happen that two requests will be using the same datacontext at the same time.

If you really need a static resource, you should use the lock statement to ensure that only one request at the same time access the resource.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文