在从数据库中检索内容并通过控制器和视图对其进行可视化时,您如何以优雅而健壮的方式混合 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 可以独立显示它。这感觉不对。
那么这样做的适当方法是什么?