У меня проблема с приложением, так как кажется, что сущность пользователя кэшируется в 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, что он, кажется, кеширует данные.