【发布时间】:2014-04-08 16:56:53
【问题描述】:
我需要将一个休眠对象保存到会话中,然后检索其中一个外键属性,如下所示:
public ActionResult Login(LoginModel model, string returnUrl) {
User usr = _userRepository.GetById(Convert.ToInt32(ModelState["User"].Value.AttemptedValue));
Session["user"] = usr;
}
public ActionResult Index() {
Customer customerActive = Session["user"].Customer.Active;
// this line throws an error:
// Initializing[Myproj.Models.Customer#3]-Could not initialize proxy - no Session.
}
由于 User.Customer 是外键并且 NHIbernate 延迟加载它,因此调用失败。如何防止这种“无会话”失败?
【问题讨论】:
-
例如试试这个阅读:hackingon.net/post/…。 MVC 和 NHibernate 意味着,每个请求都引入会话。开始时打开,结束时关闭。所有延迟加载的功能都可以访问 Session...没什么好奇怪的...
-
这不起作用,因为在这种情况下事务只在每个请求结束时提交,这意味着只能显示通用错误页面而不是特定页面。
-
您应该使用 MVC 的全部功能。将一个请求用于写入操作……另一个用于显示(成功或错误)。这可以通过 RedirectTo 轻松完成...控制器/操作都将拥有自己的完整会话访问权限
标签: c# asp.net-mvc asp.net-mvc-4 session nhibernate