Asp.net-Mvc

實體框架:已經有一個打開的 DataReader 與此命令關聯,必須先關閉

  • January 20, 2015

這個問題與有關:

我的儲存庫方法有以下程式碼:

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>

完整的例外是:

已經有一個與此命令關聯的打開的 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“列舉”查詢來“強制”執行選擇,那麼實際上執行得太晚了-在視圖中。這給想要使用相同連接的其他查詢帶來了麻煩。

引用自:https://stackoverflow.com/questions/7927990