每个请求DbContext发生随机错误

时间:2013-02-15 12:04:29

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

我在mvc + ef + unity应用程序中遇到随机错误(每天几次),负载更高(每秒10次请求):

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

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

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

1 个答案:

答案 0 :(得分:3)

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

唯一不相关的错误是死锁。它们是由

的碰撞造成的
SELECT ... FROM X JOIN Y ... JOIN Z ...

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

选择锁定Y并想要Z,TRAN锁定Z并想要Y