Храните информацию, чтобы получить их, не запрашивая базу данных - PullRequest
0 голосов
/ 09 декабря 2018

В настоящее время у меня есть проблема, которую мне нужно решить, чтобы избежать дублирования кода в моем программном обеспечении.Мне бы хотелось, чтобы к моменту входа в систему система сохраняла некоторую информацию, чтобы мне не приходилось все время заходить в базу данных запросов.Мне нужно будет хранить, например, информацию из двух классов:

ПОЛЬЗОВАТЕЛЬ

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?

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Вы можете использовать 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 минут.

0 голосов
/ 09 декабря 2018

существует множество различных решений для ваших требований:

Кэширование

Вы можете использовать в кеше памяти (например, кэш asp.net), если ваше приложение работает наодин сервер.Если их несколько, вы можете использовать распределенный кеш, например Redis или Memcached.Вы также можете получить бесплатный онлайн-сервер для тестирования.Если вы выбираете кеширование, вам также нужна хорошая стратегия для аннулирования кэша, потому что кеш без хорошей стратегии аннулирования может быть очень разрушительным для вашего приложения.

Нет баз данных SQL

Другое решение - Нет баз данных SQL, которые намного быстрее, чем реляционные базы данных.

Веб-хранилище

Если ваши данные не являются конфиденциальными, вы можете хранить небольшое количество данных в веб-хранилище браузера для каждого пользователя с некоторыми соображениями.

0 голосов
/ 09 декабря 2018

Использовать сеанс, после входа в систему установить

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

и затем использовать его где угодно Как использовать сеансы в приложении ASP.NET MVC 4?

...