实体更新后实体框架仍然给我旧的信息
本文关键字:实体 信息 更新 框架 | 更新日期: 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
}
您必须在AuthenticationFilter
的OnActionExecuting
方法中实例化一个新的存储库。过滤器是一个单例,所以你保持一个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.
}
}
}
这也使代码线程安全(目前不是)。