asp.net-mvc - Entity Framework : There is already an open DataReader associated with this Command which must be closed first

标签 asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4 entity-framework-4.1

这个问题与this有关:

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

 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 有这个代码:
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Applicant.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Position.name)
        </td>

完整的异常(exception)是:

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

它被扔在 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 的“枚举”查询“强制”执行选择,实际上它执行得太晚了 - 在 View 中。这给想要使用相同连接的其他查询带来了麻烦。

关于asp.net-mvc - Entity Framework : There is already an open DataReader associated with this Command which must be closed first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927990/

相关文章:

c# - 在 ASP.NET MVC 网站中使用 UmbracoMembershipProvider

asp.net-mvc - MVC DataAnnotation 不接受空格

c# - 首先在哪里可以找到 Entity Framework 4.0 代码中的 .csdl、.ssdl 和 .msl 文件?

c# - 如何使用 LINQ 在 db 上下文中为 3 个不同的表在 asp .net mvc 中编写通用查询?

c# - Entity Framework DbGeography 没有正确计算面积?

asp.net-mvc - asp.net MVC-复杂的例子吗?

asp.net - ValidateInput 属性似乎在 ASP.NET MVC 中不起作用

javascript - 如何从 Controller 发送多个 JSON 结果以查看?

c# - 如果 HTML 不在 Razor 中呈现

c# - 正则表达式不匹配任何html标签