实体框架:已经有一个与此命令关联的开放DataReader必须先关闭 [英] Entity Framework: There is already an open DataReader associated with this Command which must be closed first

查看:151
本文介绍了实体框架:已经有一个与此命令关联的开放DataReader必须先关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题与这个

我的存储库方法有以下代码:

My repository method has this code:

 public IEnumerable<ApplicationPositionHistory> GetApplicationPositionHistories(int applicantId, int positionId)
        {
            return context.ApplicationsPositionHistory.Where(d => d.applicantPosition.ApplicantID == applicantId && d.applicantPosition.PositionID == positionId).Include(o => o.applicantPosition) ;
        }

我的Html有以下代码:

My Html has this code:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Applicant.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Position.name)
        </td>

完整的例外是:

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

There is already an open DataReader associated with this Command which must be closed first.

它被放在HTML
@ Html.DisplayFor(modelItem)的第一行=> item.applicantPosition.Applicant.name)

It was throw in the first line of the HTML @Html.DisplayFor(modelItem => item.applicantPosition.Applicant.name)

推荐答案

快速解决方案:

public IEnumerable<ApplicationPositionHistory> GetApplicationPositionHistories(int applicantId, int positionId)
    {
        return context.ApplicationsPositionHistory.Where(d => d.applicantPosition.ApplicantID == applicantId && d.applicantPosition.PositionID == positionId).Include(o => o.applicantPosition).ToList() ;
    }

如果你想知道,为什么这样解决你的问题,看看LINQ和降级执行的工作。几句话 - 如果你不通过ToList枚举查询来强制执行select,实际上执行得太晚了 - 在视图中。而这会导致其他希望使用相同连接的查询的麻烦。

If you want to know, why this fixing your problem, read about how LINQ and deffered execution works. In few words - if you dont "force" execution of the select by "enumerating" query by ToList, it is in fact executed too late - in view. And this is causing trouble with other queries which want to use same connection.

这篇关于实体框架:已经有一个与此命令关联的开放DataReader必须先关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆