Contraseña de cambio de identidad de ASP.NET

Necesito la capacidad de cambiar la contraseña del usuario por parte del administrador. Entonces, el administrador no debe ingresar una contraseña actual del usuario, debe tener la capacidad de establecer una nueva contraseña. Miro el método ChangePasswordAsync, pero este método requiere ingresar una contraseña anterior. Entonces, este método no es apropiado para esta tarea. Por eso lo he hecho de la siguiente manera:

    [HttpPost]
    public async Task<ActionResult> ChangePassword(ViewModels.Admin.ChangePasswordViewModel model)
    {
        var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var result = await userManager.RemovePasswordAsync(model.UserId);
        if (result.Succeeded)
        {
            result = await userManager.AddPasswordAsync(model.UserId, model.Password);
            if (result.Succeeded)
            {
                return RedirectToAction("UserList");
            }
            else
            {
                ModelState.AddModelError("", result.Errors.FirstOrDefault());
            }
        }
        else
        {
            ModelState.AddModelError("", result.Errors.FirstOrDefault());
        }
        return View(model);
    }

funciona, pero teóricamente podemos recibir un error en el método AddPasswordAsync. Por lo tanto, se eliminará la contraseña anterior pero no se establece la nueva. No es bueno. ¿Alguna forma de hacerlo en "una transacción"? PD. Vi el método ResetPasswordAsync con token de reinicio, parece que es más seguro (porque no puede ser una situación inestable con el usuario) pero en cualquier caso, lo hace por 2 acciones.

Respuestas a la pregunta(7)

Su respuesta a la pregunta