C# 韩元';不要保存编辑

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

我在数据库中添加了一个布尔值“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);
    }
//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!