为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架:已经有一个与此命令关联的开放DataReader

实体框架:已经有一个与此命令关联的开放DataReader

ITMISS 2019-11-17 12:12:06
实体框架:已经有一个与此命令关联的开放DataReader我正在使用实体框架,偶尔我会得到这个错误。EntityCommandExecutionException{"There is already an open DataReader associated with this Command which must be closed first."}    at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...即使我没有做任何手动连接管理。这个错误间歇性地发生。触发错误的代码(为了便于阅读而缩短):        if (critera.FromDate > x) {             t= _tEntitites.T.Where(predicate).ToList();         }         else {             t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());         }使用Dispose模式以便每次都打开新连接。using (_tEntitites = new TEntities(GetEntityConnection())) {     if (critera.FromDate > x) {         t= _tEntitites.T.Where(predicate).ToList();     }     else {         t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());     }}仍有问题如果连接已经打开,EF为什么不重用连接?
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

这不是关闭连接。EF正确管理连接。我对这个问题的理解是,在单个连接上执行多个数据检索命令(或者具有多个选择的单个命令),而在第一个DataReader完成读取之前执行下一个DataReader。避免异常的唯一方法是允许多个嵌套的DataReaders =启用MultipleActiveResultSets。总是发生这种情况的另一种情况是,当您遍历查询结果(IQueryable)时,您将在迭代内触发加载实体的延迟加载。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 484 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信