赢得';t保存编辑

本文关键字:保存 编辑 赢得 | 更新日期: 2024-09-22 09:18:21

我在数据库中添加了一个布尔值"ChangedPassword"。我必须强制用户在第一次登录时更改密码。

在他们更改密码后,布尔值必须更改为true。它起作用了,但救不了它。

我的代码:

        // POST: /Manage/ChangePassword
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
        if (result.Succeeded)
        {
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            if (user != null)
            {
                await SignInAsync(user, isPersistent: false);
            }
            SidewindContext db = new SidewindContext();
            if (user.ChangedPassword == false)
            {
                user.ChangedPassword = true;
            }
            db.SaveChanges();
            return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
        }
        AddErrors(result);
        return View(model);
    }

我不确定我是否需要数据库。SaveChanges,但无论有没有它都无法工作。知道吗?让我知道。

赢得';t保存编辑

您需要在新创建的DbContextAttach对象,以便EntityFramework开始跟踪对象的更改。如果没有它,新创建的上下文对user对象的更改一无所知。

SidewindContext db = new SidewindContext();
db.Attach(user);
if (user.ChangedPassword == false)
{
    user.ChangedPassword = true;
}
db.SaveChanges();

我认为你应该试试这个

db.Entry(user).State = System.Data.EntityState.Modified;
db.SaveChanges();