实体更新后实体框架仍然给我旧的信息

本文关键字:实体 信息 更新 框架 | 更新日期: 2023-09-27 18:06:45

我有一个奇怪的问题,我正在用AngularJs和Web API在服务器上构建一个单页应用程序,我使用实体框架,我使用代码优先的方法一切都很顺利,直到我想为用户实现更改密码,更新正确,但是当用户试图重新连接他的新凭据时,实体框架收集旧密码!!

public class AuthenticationFilter : ActionFilterAttribute
{
    private  MyDbRepository repo;
    public KhbyraAuthenticationFilter()
    {
        repo = new MyDbRepository(new MyDbContext());
    }
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //Login code accessing database by repo object !!
        //Here where Entity framework gather old info
    }
 }

这是SecurityController

中的登录动作
[EnableCors("*", "*", "*")]
public class SecurityController : BaseApiController
{
   //other actions

    [AuthenticationFilter]
    [Route("Token")]
    [HttpPost]
    public IHttpActionResult Login([FromBody]User user)
    {
        if (user == null)
        {
            Unauthorized();
        }
        return Ok();
    }
}

编辑

这是修改通过的地方

[EnableCors("*", "*", "*")]
[KhbyraAuthorizeAttribute]
public class UserController : BaseApiController
{
    private int CurrentUserID;
    public UserController():base(new KhbyraRepository(new KhbyraContext()))
    {
    }
    //.. other actions
    //..

    [Route("User/ChangePassword")]
    [HttpPost]
    public IHttpActionResult ChangePassword([FromBody]ChangePasswordModel model)
    {
       // here where i save the new password
    }

实体更新后实体框架仍然给我旧的信息

您必须在AuthenticationFilterOnActionExecuting方法中实例化一个新的存储库。过滤器是一个单例,所以你保持一个DbContext实例,有旧的值缓存。

public class AuthenticationFilter : ActionFilterAttribute
{
    public KhbyraAuthenticationFilter()
    {
    }
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        using(var repo = new MyDbRepository(new MyDbContext()))
        {
            //Login code accessing database by repo object.
        }
    }
 }

这也使代码线程安全(目前不是)。