2015-04-25 38 views
0

这里是我查看代码:错误: “调用 '读取' 当DataReader关闭......”

@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()); 
} 

回答

2

你需要调用像ToList的方法在你的数据访问层,强制要求到数据库:

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

方法,如AsEnumerable()不要对数据库的请求。该请求仅在您首次访问数据时(在您的案例中 - 在视图中)或当您显式调用一个调用数据库的方法时(例如ToList())才会发出请求。

因为当您尝试在视图中访问对象时,出现错误,这是实际调用数据库的时间,但同时您的对象context已被丢弃。要修复它,你应该明确地强制数据库查询使用ToList而上下文尚未处置,这是你的控制器方法

+0

感谢它的工作。 – RKh

相关问题