已经有一个与此命令关联的开放DataReader,必须首先关闭linq

时间:2014-01-22 04:13:38

标签: c# linq datareader

以下代码中的错误在哪里? 已经有一个与此命令关联的打开的DataReader,必须先关闭它。

“执行命令定义时发生错误。有关详细信息,请参阅内部异常。”

var cat = from c in db.Question select c;
foreach (Questions question in cat) {
    Console.WriteLine("{0}", question.tittle);
    Console.WriteLine("{0}", question.deskripsi);
    Console.WriteLine("{0}", question.id_question);
    **foreach (Categories p in question.Categories)**
    {
        Console.WriteLine("{0}", p.id_kategori);
        Console.WriteLine("{0}", p.nama_kategori);
    }
}

1 个答案:

答案 0 :(得分:7)

您可能未在配置文件中启用多个活动结果集(MARS)。 Here是有关原因和方式的一些细节,但它总是需要添加条目

"MultipleActiveResultSets=True"

连接字符串。

然而,除了激活MARS之外,最好是急切加载Categories

from c in db.Question.Include(q => q.Categories) select c

因为在你的代码中,foreach的每次迭代都会执行一个延迟加载类别的查询(也称为 n + 1问题)。