我正在将旧的asp.net表单应用程序转换为MVC。我遇到了一个显示搜索结果的障碍。
我有一个Classes,Class Details,Rosters和Class tutorials的实体框架模型。
我有一个搜索页面,我希望按所选课程显示所有课程详细信息。
查看:
@using System.Diagnostics
@model IEnumerable<SafetyReports.Models.DataModel.ClassDetails>
<div>
<table>
<tr>
<th>
Class Date
</th>
<th>
Location
</th>
<th>
Region
</th>
<th>
# of Attendees
</th>
</tr>
@foreach (var c in Model)
{
Debug.WriteLine(c.ClassDetailID);
<tr>
<td>
@c.ClassDate
</td>
<td>
@c.Location
</td>
<td>
@c.Region
</td>
<td>
@c.ClassRosters.Count
</td>
<td>
<input type="button" value="Detail" onclick="alert(@c.ClassDetailID)"/>
</td>
</tr>
}
</table>
</div>
控制器:
public PartialViewResult SelectCourse(string id)
{
var e = new Entities();
var i = e.ClassDetails.Where(x => x.ClassID.ToString() == id).ToList();
return PartialView("_ClassesDetail", i);
}
我的问题是,每2-3节课似乎需要大约1秒钟。我有一个类型有1300条记录,返回视图大约需要5-6分钟。我究竟做错了什么?在asp.net表单应用程序中,我有一个gridview,如果那么长,它会在几秒钟内返回相同数量的数据。它不是使用EF,只是一个sqldatasource。这可能是延迟加载吗?
答案 0 :(得分:0)
我发现了我的问题,我的相关对象是延迟加载的,我修复了包含这些对象的问题:
var i = e.ClassDetails.Where(x => x.ClassID == id).Include(x=>x.ClassInstructors).Include(x=>x.ClassRosters).ToList();
答案 1 :(得分:0)
首先,如前所述,使用int而不是字符串来识别&#39; id&#39;将加快你的EF查询。
这是加速视图渲染的一种方法(或者至少使其更清晰):
在视图中用简单的替换所有@foreach循环:
//here Razor will automatically repeat you model displayTemplate for
//each element of your IEnumerable
@Html.DisplayForModel()
然后为您的模型定义显示模板
〜/查看/共享/ DisplayTemplates / ClassDetails.cshtml
@model SafetyReports.Models.DataModel.ClassDetails
<tr>
<td>
@Model.ClassDate
</td>
<td>
@Model.Location
</td>
<td>
@Model.Region
</td>
<td>
@Model.ClassRosters.Count
</td>
<td>
<input type="button" value="Detail" onclick="alert(@Model.ClassDetailID)"/>
</td>
</tr>