Entity Framework datareader已经打开嵌套实体循环

时间:2010-11-13 17:53:22

标签: c# entity-framework-4

我从数据库中检索了两个实体列表,它们使用相同的上下文和相同的连接字符串。当我从上下文中获取它们时,它们具有导航属性并且这些属性很好,即IQueryable<EntityA> A = context.EntityA.Include("V"), IQueryable<EntityB> B = context.EntityB.Include("V")

有一个嵌套循环,即

foreach(EntityA a in A) {
  foreach (EntityB b in B) { 
    if (b.V.property == a.V.property) {
      // do something 
    } 
  }
}

当它在此循环中到达EntityB时,抛出了一个已经打开的datareader异常。我理解为什么会这样,因为他们共享相同的连接字符串和conetext但是我不确定解决方案是什么。 谢谢

1 个答案:

答案 0 :(得分:0)

我不确定你的数据访问模式是什么(存储库模式等...)但我会尝试在“foreach”循环之前迭代某处并从内存迭代循环。您可以使用简单的ToList()而非循环IQueryable<T>

您可以直接查询列表或将IQueryable带入的任何地方,只需在最后添加到列表中。多数民众赞成我可以建议,直到我看到更多的代码。