Изменения в свойстве ApplicationUser не записываются в базу данных - PullRequest
0 голосов
/ 20 февраля 2019

В моем контроллере есть код для отключения учетной записи.Код работал нормально.Внезапно это не так.

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 голосов
/ 20 февраля 2019

Я понял это.Я попытался добавить следующую строку, чтобы убедиться, что контекст базы данных сохраняет изменения.

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

Однако эта строка вызвала исключение, поскольку мой код выдал дублирующее значение в индексированном столбце.

Теперь я предполагаю, что мой исходный код также создавал исключение, но оно было обработано без вывода сообщений.Строка выше не нужна.Пока не существует скрытого исключения, мой оригинальный код работает нормально.И это объясняет, почему оно работало, но затем остановилось: потому что ему нужно было отключить две учетные записи, прежде чем появился дубликат, вызывающий исключение.

...