我有代码方法:
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属性上移动鼠标,我可以看到正确的值。
抱歉我的英语不好。
答案 0 :(得分:1)
完全使用“using”块之外的“return View()”语句。这将确保您在放置DbContext对象之前检索完整的数据集。像这样:
using (var cc = new MyDBContext())
{
var myList = (linq).ToList();
}
return View(myList);
我很确定问题是你将IEnumerable返回给View,这意味着尚未实际检索到这些项目。但是当您将对象返回到View时,DbContext将在视图有机会检索行之前被释放。
答案 1 :(得分:1)
问题出在用户实体的延迟加载子属性中。我添加到链接语句Include(“PropName”),它运作良好。