EntityFramework, кажется, кеширует службу в AccountController - PullRequest
0 голосов
/ 27 июня 2019

У меня проблема с приложением, так как кажется, что сущность пользователя кэшируется в AccountController.

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

У меня есть страница «Изменить пользователя», а также страница со списком всех пользователей. После того, как я отредактирую пользователя и сохраню его, он вернется на страницу со списком, и там я смогу увидеть сделанные мной изменения (работая так, как будто должен использовать другой экземпляр того же сервиса).

Но когда я выхожу и снова вхожу в систему, я все еще вижу исходные значения в контроллере учетной записи. В нашем AccountController у нас есть userService, который мы используем для получения userInfo:

 private IUserService _userSvc;
 public AccountController(IUserService userSvc)
 {
     _userSvc = userSvc;
 }

Затем в методе Login мы используем этот сервис для получения сущности пользователя:

 [HttpPost]
 [AllowAnonymous]
 [ValidateAntiForgeryToken]
 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
 {
     var timeoutMinutes = 60;
     if (!ModelState.IsValid)
     {
         return View(model);
     }

     Session["UserName"] = "Unknown User";
     Logger.Instance.Info("Setting username to unknown user");
     var msg = string.Empty;
     var user = _userSvc.GetLoginUserData(model.Username, out msg);
     foreach (MembershipProvider provider in Membership.Providers)
     {
         var username = user.USERNAME;
...
}

Если я посмотрю на сущность usr (после выхода из системы, входа в систему), в этот момент она все еще имеет исходные значения, а не атрибуты, которые есть в базе данных для этой записи.

Вот мой метод LogOff, где я очищаю сессию и т. Д.

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
        AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
        FormsAuthentication.SignOut();
        Session.Clear();
        Session.Abandon();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        // clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
        SessionStateSection sessionStateSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
        HttpCookie cookie2 = new HttpCookie(sessionStateSection.CookieName, "");
        cookie2.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie2);

        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();

        return RedirectToAction("Login", "Account");
    }

Почему _userSvc кэширует данные и не показывает, что находится в базе данных. Если я остановлю Visual Studio и перезапущу отладку, то у объекта будут правильные данные, поэтому он будет кэшироваться?

Нет, где еще в приложении у меня есть эта проблема с Entity Framework, она только в AccountController.Login, что он, кажется, кеширует данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...