我添加了一个布尔值" 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);
}
我不确定我是否需要db.SaveChanges,但它不能使用或不使用。 任何的想法?让我知道。
答案 0 :(得分:3)
您需要Attach
新创建的DbContext
中的对象,以便EntityFramework开始跟踪对象的更改。没有它,您新创建的上下文就<{1}}对象的更改知道 nothing 。
user
答案 1 :(得分:1)
我认为你应该试试这个
db.Entry(user).State = System.Data.EntityState.Modified;
db.SaveChanges();