ASP.NET MVC和实体框架:查询持久性

时间:2009-07-03 11:25:29

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

我遇到以下问题: 在控制器中,我选择我需要的数据并将其存储到ViewData;

using (Models.SkedruleEntities ctx = new Models.SkedruleEntities())
{
    ViewData["users"] = (from u in ctx.User select u);
}

在View中我尝试从ViewData中读取这样的内容:

<p>
    <%foreach(User user in (IEnumerable<User>)ViewData["users"]) { %>
        <div><%=user.Name %></div>
    <%}%>
</p>

但我得到一个System。ObjectDisposedException错误,因为ViewData似乎包含查询,而不是查询检索到的数据,当然上下文ctx也不再可用。

有任何帮助吗? 感谢

2 个答案:

答案 0 :(得分:2)

只需添加ToList()

ViewData["users"] = (from u in ctx.User select u).ToList();

答案 1 :(得分:2)

您将查询存储在视图数据中,而不是结果中。因此,在视图中,您将获得查询并执行它。在那一刻,背景已经被处理掉了。

解决方案是在控制器中执行查询并将结果存储在ViewData中:

ViewData["users"] = (from u in ctx.User select u).ToList();