gpt4 book ai didi

linq - Entity Framework : There is already an open DataReader associated with this Command

转载 作者:行者123 更新时间:2023-12-03 09:20:32 24 4
gpt4 key购买 nike

我正在使用 Entity Framework ,偶尔会出现此错误。

EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...

即使我没有进行任何手动连接管理。

此错误间歇性发生。

触发错误的代码(为了便于阅读而缩短):
        if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}

使用 Dispose 模式以便每次打开新连接。
using (_tEntitites = new TEntities(GetEntityConnection())) {

if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}

}

仍然有问题

如果连接已经打开,为什么 EF 不重用它。

最佳答案

这与关闭连接无关。 EF 正确管理连接。我对这个问题的理解是,有多个数据检索命令在单个连接(或具有多个选择的单个命令)上执行,而下一个 DataReader 在第一个完成读取之前执行。避免异常的唯一方法是允许多个嵌套的 DataReaders = 打开 MultipleActiveResultSets。总是发生这种情况的另一种情况是,当您遍历查询结果 (IQueryable) 时,您将在迭代中触发加载实体的延迟加载。

关于linq - Entity Framework : There is already an open DataReader associated with this Command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4867602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com