我现在的问题是:这个代码在vue上是否真的会进行延迟加载,每次它都会进入数据库?
@{
int langId = ViewBag.LangId;
int i = 0;
foreach (var item in Model)
{
i++;
<tr class="@(i % 2 == 0 ? "even" : "odd")">
<td>
@Html.DisplayFor(modelItem => item.AlbumsLocs.FirstOrDefault(b => b.LanguageId == langId).Title)
</td>
</tr>
}
}
我的控制器代码:
public ViewResult Index()
{
var moduleItems = db.Albums.Include(x => x.AlbumsLocs).Where(a => a.AlbumVocId == id).ToList();
return View(moduleItems);
}
答案 0 :(得分:1)
您可能在item.AlbumsLocs.FirstOrDefault(b => b.LanguageId == langId)
基本上,您在初始请求中使用延迟加载来获取模型。然后,对于该模型中的每个项目,您将访问数据库以获取当前项目的标题。
解决方案是在初始查询中获取标题。
有关n + 1问题的更多信息:What is SELECT N+1?