Asp.net-Mvc
實體框架:已經有一個打開的 DataReader 與此命令關聯,必須先關閉
這個問題與此有關:
我的儲存庫方法有以下程式碼:
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“列舉”查詢來“強制”執行選擇,那麼實際上執行得太晚了-在視圖中。這給想要使用相同連接的其他查詢帶來了麻煩。