C# 韩元';不要保存编辑
我在数据库中添加了一个布尔值“ChangedPassword”。我必须强迫用户在第一次登录时更改密码 更改密码后,布尔值必须更改为true。它正在工作,但无法保存它 我的代码:C# 韩元';不要保存编辑,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我在数据库中添加了一个布尔值“ChangedPassword”。我必须强迫用户在第一次登录时更改密码 更改密码后,布尔值必须更改为true。它正在工作,但无法保存它 我的代码: // POST: /Manage/ChangePassword [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> ChangePassword(ChangePasswordView
// 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);
}
//POST:/Manage/ChangePassword
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务ChangePassword(ChangePasswordViewModel模型)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
var result=await UserManager.ChangePasswordAsync(User.Identity.GetUserId(),model.OldPassword,model.NewPassword);
if(result.successed)
{
var user=await UserManager.FindByIdAsync(user.Identity.GetUserId());
如果(用户!=null)
{
等待信号同步(用户,ispersist:false);
}
SidewindContext db=新的SidewindContext();
if(user.ChangedPassword==false)
{
user.ChangedPassword=true;
}
db.SaveChanges();
返回RedirectToAction(“Index”,new{Message=ManageMessageId.ChangePasswordSuccess});
}
加法器(结果);
返回视图(模型);
}
我不确定我是否需要db.SaveChanges,但它在使用或不使用时都不起作用。
有什么想法吗?让我知道 您需要在新创建的
DbContext
中附加对象,以便EntityFramework开始跟踪对象的更改。如果没有它,新创建的上下文对用户
对象的更改一无所知
SidewindContext db = new SidewindContext();
db.Attach(user);
if (user.ChangedPassword == false)
{
user.ChangedPassword = true;
}
db.SaveChanges();
您需要在新创建的DbContext
中附加对象,以便EntityFramework开始跟踪对象的更改。如果没有它,新创建的上下文对用户
对象的更改一无所知
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();
我想你应该试试这个
db.Entry(user).State = System.Data.EntityState.Modified;
db.SaveChanges();
user
与db
不在同一上下文中。可以使用SidewindContext
本身而不使用UserManager
查找用户
,并将true
分配给ChangedPassword
或在用户管理器中创建一个方法,将true
分配给ChangedPassword
使用UserManager
正在使用的上下文user
与db
不在同一上下文中。或者使用SidewindContext
本身而不使用UserManager
查找用户
,并将true
赋值给ChangedPassword
,或者创建用户管理器中的一种方法,它将true
分配给ChangedPassword
,该方法使用UserManager
使用的上下文。这可能是一个愚蠢的问题,但我的数据库无法识别附件?我尝试了多个contextes,但没有找到该方法Attach@DannyBrouwer奇怪,你使用的是什么版本的EntityFramework?它应该在System.Data.Objects
中,您可能需要一个using
指令(请参见此处:)@DannyBrouwer您是否尝试使用指令添加?我已经找到了!我必须使用'SidewindContext db=this.HttpContext.GetOwinContext().Get();'获取附加方法。谢谢你的回答@DannyBrouwer没问题,很高兴你处理好了。如果答案正确,点击“勾选”图标将其标记为正确。欢迎来到SO!这可能是一个愚蠢的问题,但我的数据库不会承认附加?我尝试了多个contextes,但没有找到该方法Attach@DannyBrouwer奇怪,你使用的是什么版本的EntityFramework?它应该在System.Data.Objects
中,您可能需要一个using
指令(请参见此处:)@DannyBrouwer您是否尝试使用指令添加?我已经找到了!我必须使用'SidewindContext db=this.HttpContext.GetOwinContext().Get();'获取附加方法。谢谢你的回答@DannyBrouwer没问题,很高兴你处理好了。如果答案正确,点击“勾选”图标将其标记为正确。欢迎来到SO!