[asp.net-mvc]错误:"电话 '读' datareader 关闭时......"

发布时间: 2017/3/25 17:19:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

下面是从我看代码︰

@model IEnumerable<Sample2.Models.Leave_GetDetails_Result1>

@{
    ViewBag.Title = "Index";
}

<div>
    @foreach (var item in Model) { 
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.LA_StaffCode)
        </dt>

        <dd>
            @Html.DisplayFor(model => item.LA_StaffCode)
        </dd>

        <dd>
            @Html.DisplayFor(model => item.LA_AppNo)
        </dd>
    </dl>
    }
</div>
<p>
    @*@Html.ActionLink("Edit", "Edit", new { id = Model.Staff_Code }) |*@
    @Html.ActionLink("Back to List", "Index")
</p>

我在执行时,它给出了错误︰

"Calling 'Read' when datareader is closed is not a valid operation"

编辑︰

该控制器代码是下面打电话存储的过程︰

using (var context = new Admin_TestEntities())
{
    var data = context.Leave_GetDetails("Recommended");
    return View(data.AsEnumerable());
}

解决方法 1:

你需要调用一个类似 ToList 在你的数据访问层,迫使请求到数据库︰

using (var context = new Admin_TestEntities())
{
    var data = context.Leave_GetDetails("Recommended").ToList();
    return View(data);
}

方法,如 AsEnumerable() 不做要求的数据库。当你第一次访问的数据 (在你的情况-在视图中) 或当您显式调用方法使得对数据库的调用只提出要求 (例如 ToList() )。

你得到一个错误,因为当您尝试访问时对数据库的调用实际上由你视图中的对象,但在同一时间您的对象 context 已释放。要修复它你应该显式强制数据库查询使用 ToList 而上下文尚未售出,这是在您的控制器方法

官方微信
官方QQ群
31647020