ObjectContext实例已被释放,不能再用于需要连接的操作。
这是控制器:
public ActionResult Home()
{
HomeViewModel model = new HomeViewModel();
return View(model);
}
这是HomeViewModel对象:
public class HomeViewModel
{
public virtual ICollection<MenuItem> Menu { get; set; }
public HomeViewModel()
{
using (Core db = new Core())
{
Menu = db.Menu.ToList();
Dashboard = db.Dashboard.ToList<DashboardItem>();
foreach (MenuItem item in Menu)
{
item.Items = (from mi in db.Menu where mi.Parent.MenuItemID == item.MenuItemID select mi).ToList();
}
}
}
}
这是主页视图:
@model AVP.DAL.HomeViewModel
@{
ViewBag.Title = "Home";
}
<div class="row">
<div class="col-lg-8">@Html.Partial("SidebarP", Model)</div>
<div class="col-lg-8">@Html.Partial("DashboardP", Model)</div>
</div>
这是侧边栏部分视图:
@model AVP.DAL.HomeViewModel
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav nav-stacked">
@foreach (AVP.DAL.MenuItem mi in Model.Menu.Where(m => m.Menu.Name == "SideBar")) // <-- exception thrown here
{
// whatever
}
</ul>
</div>
异常被抛出,但正如链接问题所示,我调用了ToList()来强制进行数据库访问。
我在using()
周围取出了DbContext
并解决了问题,但我不明白为什么在将数据带入模型时这应该重要?
我是否因为使用了?而将应用程序置于内存泄漏的风险中?
感谢您的帮助,
.PD。