已经有一个与此命令关联的打开的 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 与此命令关联,必须先关闭'