我的控制器中有禁用帐户的代码。代码工作正常。现在,突然之间不是。
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
。
我不知道这怎么可能改变。有人可以帮忙解释一下吗?
答案 0 :(得分:0)
我知道了。我尝试添加以下行以确保数据库上下文正在保存更改。
HttpContext.GetOwinContext().Get<ApplicationDbContext>().SaveChanges();
但是,此行导致异常,因为我的代码在索引列中产生了重复的值。
我现在假设我的原始代码也产生了异常,但是它是静默处理的。不需要上面的行。只要没有隐藏的异常,我的原始代码就可以正常工作。这就解释了它为什么起作用但随后停止的原因:因为在重复出现该异常之前,必须禁用两个帐户。