asp.net-mvc - 每个请求 DbContext 都会发生随机错误

标签 asp.net-mvc entity-framework unity-container dbcontext

我的 mvc+ef+unity 应用程序在较高负载(每秒 10 个以上请求)下遇到随机错误(每天几个):

  • 连接未关闭/连接的当前状态为连接
  • Count 查询出现死锁(无显式事务)
  • 已添加具有相同键的项目。解析 DbContext 时在 System.Data.Entity.DbContext.SetTEntity
  • 远程主机关闭了连接。错误代码是0x80070057
  • 已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。 - 我打开 MARS 来摆脱这个问题(尽管我相信它应该在没有 MARS 的情况下正常工作,但没有嵌套查询),这可能会导致另一个随机错误:
  • 服务器将断开连接,因为客户端驱动程序在 session 处于单用户模式时发送了多个请求。

我使用this PerRequestLifetimeManager 的实现并尝试了 Unity.Mvc3,没有任何区别。

some hints DbContext 没有被正确处理。我不确定每个请求是否是问题的原因,因为它似乎是 common练习。

最佳答案

经过进一步调查,我发现请求处理线程有时会从其他线程窃取 DbContext,因此 Rashid 的 PerRequestLifetimeManager 实现可能不是线程安全的。我再次转移到Unity.Mvc3,错误消失了,我上次尝试时一定犯了一些错误。

唯一不相关的错误是死锁。它们是由碰撞引起的

SELECT ... FROM X JOIN Y ... JOIN Z ...

BEGIN TRAN
UPDATE Z ...
UPDATE Y ...
COMMIT TRAN

SELECT 锁定了 Y 并想要 Z,TRAN 锁定了 Z 并想要 Y

关于asp.net-mvc - 每个请求 DbContext 都会发生随机错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894350/

相关文章:

c# - Unity、Moq 和 NUnit - Controller 构造函数的参数在测试中无法识别

c# - UnityContainer.Resolve 比 Activator.CreateInstance 有什么优势?

asp.net-mvc - MVC3 远程验证和 AntiForgeryToken

asp.net-mvc - 向 ASP.NET MVC 4 中的单选按钮添加自定义类

c# - Entity Framework 4.1 POCO - 多对多加载

c# - 为什么我的数据库上下文中不存在 ObjectStateManager 属性?

asp.net-mvc - SignalR Hub ResolutionFailedException 与 Unity

c# - 通用 View 模型?

asp.net-mvc - 使用缩小的 JS 和 CSS 的公共(public)条件 Razor View

c# - 如何在 Entity Framework 中处理这种层次结构