使用部分视图进行延迟加载 - 已经处理了ObjectContext

时间:2014-03-05 11:53:53

标签: c# entity-framework asp.net-mvc-4 razor

我已阅读thisthis以及其他人喜欢他们,但我仍在

  

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。

0 个答案:

没有答案