我正在开发Asp.Net MVC项目,我使用EF来访问数据库。由于某些原因,我不能先使用代码,因此我使用数据库优先方法,并且lazyLoading在启用时不起作用!例如,我在处理dbContext后无法执行以下代码:
public ActionResult ListAll()
{
List<Album> albums = new List<Album>();
using (newsDBEntities context = new newsDBEntities())
{
albums = context.Albums.ToList();
return View(albums);
}
}
和观点
@foreach(模特中的project.Models.Album专辑)
{
List<project.Models.Image> img = album.Images.Take(3).ToList();
<div class="albumHolder">
@foreach (var item in img)
{
<div class="imageHolder">
<img src ="@item.imageURL" width="200px" height="200px" />
</div>
}
<p class="albumP">@album.albumName</p>
</div>
}
<div></div>
</div>
我在试图在视图中使用3个模型元素的行中得到以下异常:
ObjectContext实例已被释放,不能再用于需要连接的操作。
我想知道为什么在启用延迟加载时它不应该加载图像。当我在Console应用程序中执行类似的代码时,我也想知道它为什么会起作用!
答案 0 :(得分:3)
更新的答案
好吧,您似乎正在尝试在视图中进行延迟加载,我认为这种方式无法正常工作。相反,我认为您应该确保视图中所需的所有数据都加载到控制器中。在您的情况下,我认为您需要包含图像详细数据。尝试将控制器中的代码更改为
// At the top of your class code:
using System.Data.Entity;
// And then inside the using clause:
albums = context.Albums.Include(x => x.Images).ToList();
这将确保相册的图像在视图中可用,因此不需要延迟加载。