2012-03-25 131 views
-1

我有方法的代码:净实体框架ObjectContext的错误

using (var cc = new MyDBContext()) 
      { 
       var myList = (from user in cc.Users 
            where user.UserGroup.Name == "smth" 
            orderby user.ID ascending 
            select user); 

       if (startIndex != null) 
        return View(myList.Skip((int)startIndex).Take(50)); 
       else 
        return View(myList); 
      } 

鉴于我赶例外的ObjectContext的实例已被设置,并且不再能够用于需要连接的操作。

有些人说.ToList()必须解决问题,但它也会抛出myList.ToList()异常。我的问题是什么?

P.S.在调试模式下,我在@ item.FullName的视图中有异常,但是如果将鼠标移动到FullName属性上,我可以看到正确的值。

对不起,我的英语不好。

+1

可能重复一百万... http://stackoverflow.com/search?q=ObjectContext+Disposed+%5Basp-net-mvc%5D – 2012-03-25 16:46:59

+0

他们建议删除使用语句,但在另一篇文章中人们说我总是应该关闭dbcontext对象。 – Dmitriy 2012-03-25 16:50:43

回答

1

问题出在用户实体的延迟加载子属性。我添加到链接语句包括(“PropName”),它的效果很好。

1

完全在“使用”块之外执行“返回View()”语句。这将确保您在处理DbContext对象之前检索完整的数据集。就像这样:

using (var cc = new MyDBContext()) 
{ 
    var myList = (linq).ToList(); 
} 
return View(myList); 

我敢肯定,问题是,你是返回一个IEnumerable来查看,这意味着该项目没有实际尚未检索。但是,当您将对象返回到您的视图时,DbContext将在视图有机会检索行之前进行处理。

+0

比我有同样的错误返回查看(teacherList.ToList()); – Dmitriy 2012-03-25 16:47:35

+0

已更新上面。我的意思是说,还包括“使用”块内的ToList()。 – McGarnagle 2012-03-25 16:52:07

+0

当我移动返回查看(myList);在使用语句之外,如你所说(在使用语句中,我写了(linq语句).ToList();)我在视图@ item.FullName :(。 – Dmitriy 2012-03-25 16:55:16