存储信息以在不查询数据库的情况下检索它们

Store information to retrieve them without querying the database

目前我有一个问题需要解决以避免软件中出现重复代码。我希望在执行登录时,系统会存储一些信息,这样我就不必一直去查询数据库。例如,我需要存储来自两个 类:

的信息

用户

public class User
{
    public Guid Id { get; set; }

    public String Name { get; set; }    

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

学校

public class School
{
    public Guid Id { get; set; }

    public String Name { get; set; }    

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    public int Code { get; set; }
}

我经常在我的软件中使用这两个信息,目前每次都是从数据库中加载它们。所以我想知道有没有办法让我在登录的时候把信息存储起来,这样我就不用去查询数据库了。我的登录码:

if (user != null)
{
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, 
      FormsAuthentication.Encrypt(new FormsAuthenticationTicket(login.Email.ToLower(), false, 60))));
    //Store school and user information here.
    return RedirectToAction("Dashboard", "Home", new { area = "" });
}

有什么方法可以像 User.Identity.Name 一样存储和检索这些信息吗?

使用会话,登录后设置

Session["user"] = user;
Session["school"] = school; 

然后随心所欲地使用它 How to use sessions in an ASP.NET MVC 4 application?

您可以使用 Session 对象

https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.controller.session?view=aspnet-mvc-5.2

https://code.msdn.microsoft.com/How-to-create-and-access-447ada98

此对象允许您在多个控制器中使用一个用户的信息。它还允许您向其添加过期类型。默认为 30 分钟。

有许多不同的解决方案可满足您的要求:

缓存

如果您的应用程序 运行 在一台服务器上,您可以使用内存缓存(如 asp.net 缓存)。 如果不止一个,那么您可以使用分布式缓存,例如 Redis 或 Memcached。您也可以获得一些免费的在线服务器用于测试目的。如果您选择缓存,您还需要一个好的策略来使缓存失效,因为没有好的失效策略的缓存会对您的应用程序造成非常大的破坏。

没有 SQL 数据库

另一个解决方案是没有 SQL 比关系数据库快得多的数据库。

网络存储

如果您的数据不敏感,您可以考虑在浏览器的网络存储中为每个用户存储少量数据。