从ASP.NET MVC中的数据库中检索内容

时间:2013-01-01 16:08:30

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

当从数据库中检索内容并通过控制器和视图可视化时,如何以优雅和健壮的方式混合ASP.NET MVC和实体框架的概念?

下面的示例将抛出Dispose异常,因为在关闭using语句后将显示View。

        // code in controller
        using (var usersDb = new UsersDb(new WebSecurityWrapper()))
        {
            var user = usersDb.GetUser(User.Identity.Name);
            return View(user);
        }

        // code in usersDb model -- GetUser method
        public User GetUser(string name)
        {
            var id = _webSecurity.GetUserId(name);
            var user = Users.FirstOrDefault(usr => usr.Id == id);

            return user;
        }

非常明显,但我能想到的唯一选择是“克隆”用户对象,以便View可以独立显示它。这感觉不对。

那么这样做的恰当方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为您在视图中使用了User对象的导航属性。这些可能是以懒惰的方式评估的。

在退出方法之前,将创建User对象。不知何故,您正在请求在视图中查询的额外信息。但由于处置已经发生,因此导致例外。

一种选择是使用Include立即查询额外的必要数据。

答案 1 :(得分:0)

    User user;
    using (var usersDb = new UsersDb(new WebSecurityWrapper()))
    {
        user = usersDb.GetUser(User.Identity.Name);
    }

    return View(user);