我在我的应用程序中添加了一个名为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,必须先关闭它。
有什么想法吗?
答案 0 :(得分:3)
最快我曾经解决过我自己的问题。事实证明,我正在迭代一个延迟加载的Board
实体集合。在那次迭代中,我然后迭代了Board的导航属性,这是另一个数据读取器。
简单的解决方法是在电路板集合上调用.ToList()
并迭代内存中的集合。