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

use*_*811 2 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ger*_*old 7

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

"MultipleActiveResultSets=True"
Run Code Online (Sandbox Code Playgroud)

到连接字符串.

但是,除了激活MARS之外,最好还是急于加载Categories:

from c in db.Question.Include(q => q.Categories) select c
Run Code Online (Sandbox Code Playgroud)

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