在ASP.NET MVC中存储全局对象

时间:2014-12-02 11:54:07

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

我目前正在使用用户登录构建一个相当大的ASP.NET MVC应用程序。某些方法/函数仅限于特定类型/角色的用户(不是常规ASP.NET角色),并且在运行这些函数时,我必须检查数据库中是否有当前的,已记录的用户有权执行给定的任务。

由于您可能可以进行成像,因此会导致对数据库进行大量调用以获取此人。所以,目前,对于每个页面加载和每个受限制的方法,我正在进行此调用:

var person = ctx.People
             Include("Person_Firm_PersonResponsibility.Firm")
             .Include("Person_Firm_PersonResponsibility.PersonResponsibility")
             .Include("Person_Firm_PersonOption.PersonOption")
             .Include(x => x.City)
             .Include(x => x.Country)
             .FirstOrDefault(x => x.ID == personId);

因为我需要全局显示数据的所有这些信息。

有没有办法简单地进行一次这样的调用(即当用户登录时),然后将该对象存储在某个地方供以后使用?显然,可以使用Session变量,但由于person对象包含一些敏感数据,我不确定这是不是一个好主意; - )

非常感谢任何帮助!

提前致谢。

1 个答案:

答案 0 :(得分:1)

根据您希望的范围,您可以使用:

  • 会话:对于当前用户,在当前导航会话中(没有其他用户可以看到它);
  • 缓存:适用于所有用户,具有固定的到期日期;
  • 应用程序:适用于所有用户,没有过期。

对于缓存和应用程序,密钥可能由某些用户属性组成,例如id或login。 这些人(https://efcache.codeplex.com/)为实体框架实现了二级缓存,可能值得一试。