实体框架代码首先已经打开数据读取器?

时间:2012-09-20 18:30:17

标签: asp.net .net entity-framework ef-code-first entity-framework-4.3

我在我的应用程序中添加了一个名为TopicCount的代码优先实体的简单方法,它接受一个布尔值。它计算导航属性中的项目数,并根据传入的布尔值是真还是假来计算过滤次数。

public class Board
{
    public short BoardID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Hidden { get; set; }
    public bool ModsOnly { get; set; }
    public bool Locked { get; set; }
    public bool Anonymous { get; set; }
    public bool AllTopics { get; set; }

    public virtual ICollection<Topic> Topics { get; set; }

    public long TopicCount(bool isModerator)
    {
        if (isModerator)
            return this.Topics.ToList().Count;
        else
            return this.Topics
                .Where(x => !x.ModsOnly)
                .Where(x => !x.Board.ModsOnly)
                .Where(x => !x.Board.Hidden)
                .Count();
    }
}

当我调用此TopicCount方法时,它失败(无论bool是真还是假),并出现以下错误:

  

已经有一个与此命令关联的打开DataReader,必须先关闭它。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

最快我曾经解决过我自己的问题。事实证明,我正在迭代一个延迟加载的Board实体集合。在那次迭代中,我然后迭代了Board的导航属性,这是另一个数据读取器。

简单的解决方法是在电路板集合上调用.ToList()并迭代内存中的集合。