已经有一个与此命令关联的打开的 DataReader 必须首先关闭 linq [重复]

Posted

技术标签:

【中文标题】已经有一个与此命令关联的打开的 DataReader 必须首先关闭 linq [重复]【英文标题】:There is already an open DataReader associated with this Command which must be closed first linq [duplicate] 【发布时间】:2014-01-22 04:13:38 【问题描述】:

下面的代码哪里出错了? 已经有一个与此命令关联的打开的 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);
    

【问题讨论】:

这是 Linq-to-SQL 还是 Linq-to-Entities? 【参考方案1】:

您可能没有在配置文件中启用多个活动结果集 (MARS)。 Here 是为什么和如何的一些细节,但它总是需要添加一个条目

"MultipleActiveResultSets=True"

到连接字符串。

但是,除了激活 MARS 之外,最好提前加载 Categories

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

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

【讨论】:

当我更改时,错误“找不到 'MyStuck.Models.Category' 的概念模型类型。”仅供参考(我是手动创建模型) 好的,你的问题的异常解决了。现在你有一个新问题。

以上是关于已经有一个与此命令关联的打开的 DataReader 必须首先关闭 linq [重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

已经有一个与此命令关联的打开的 DataReader 必须首先关闭 linq [重复]

调用另一个 repo 时出错 - '已经有一个打开的 DataReader 与此命令关联,必须先关闭'

已经有一个与此命令关联的打开的数据读取器,必须先关闭异常

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

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