存储一个OBject值,如果它在MVC3应用程序中发生更改,则更新该值

时间:2012-08-08 16:56:06

标签: asp.net-mvc-3 design-patterns entity-framework-4 session-state

我需要实现功能,当有人登录时,会存储用户对象(包含一些其他导航属性)

我想在获取与用户相关的信息时访问此信息,以便我无需点击数据库,例如

用户有通知,所以如果我必须查询我想要这样的

    Announcements announcements = Storage.User.Announcements;
    var result = from m in announcements 
                 where m.DueDate== 'someting'

我有很多与User相关的功能,并希望在不从DB获取的情况下持久化和查询记录

当用户登出'Storage.User中的值时应该清理

我已经实现了Singleton模式,但它不能正常工作

PL建议任何模式或练习

1 个答案:

答案 0 :(得分:0)

Singletone在这里不起作用,因为无论何时发出新请求,您的控制器(以及控制器生成的对象)都会重新生成。记住,HTTP不保持状态。

要保持,您可以将对象存储在会话中。

登录时,请执行:

HttpContext.Current.Session["the-session-key"] = YourObject

当您需要访问Object时,请执行:

YourObjectType yourObject = (YourObjectType)HttpContext.Current.Session["the-session-key"]

要清除会话,请执行以下操作:

HttpContext.Current.Session.Clear();

如果您在控制器内部进行操作,则可以直接访问控制器中Session的{​​{1}}属性。

例如,在Controller中,您可以执行以下操作:

Session