对ApplicationUser属性的更改不会写入数据库

时间:2019-02-20 18:05:29

标签: c# asp.net-mvc asp.net-identity

我的控制器中有禁用帐户的代码。代码工作正常。现在,突然之间不是。

public async Task<ActionResult> DisableClient(string userId, int disableAccount)
{
    bool disable = (disableAccount != 0);
    ApplicationUser user = UserManager.FindById(userId);
    if (user != null && user.Disabled != disable)
    {
        user.UserName = disable ? DisabledUserName : user.Email;   // Not sure if this is needed
        user.Disabled = disable;
        // Generating a new security stamp invalidates the user's
        // session, effectively locking them out
        if (user.Disabled)
            await UserManager.UpdateSecurityStampAsync(userId);
        await UserManager.UpdateAsync(user);
    }
    return RedirectToAction("Details", "Client", new { userId = userId });
}

ApplicationUser.Disabled映射到AspNetUsers.Disabled。但是现在,我可以看到上面的代码将此属性设置为true,但是数据库中的值仍然为false

我不知道这怎么可能改变。有人可以帮忙解释一下吗?

1 个答案:

答案 0 :(得分:0)

我知道了。我尝试添加以下行以确保数据库上下文正在保存更改。

HttpContext.GetOwinContext().Get<ApplicationDbContext>().SaveChanges();

但是,此行导致异常,因为我的代码在索引列中产生了重复的值。

我现在假设我的原始代码也产生了异常,但是它是静默处理的。不需要上面的行。只要没有隐藏的异常,我的原始代码就可以正常工作。这就解释了它为什么起作用但随后停止的原因:因为在重复出现该异常之前,必须禁用两个帐户。