Удалить роль и восстановить роль в таблице - PullRequest
1 голос
/ 04 января 2012

за ошибку.Я использовал неправильную команду.Я хотел удалить роль пользователя из таблицы aspnet_UsersInRoles.Я предполагаю, что команда может быть

Roles.RemoveUserFromRole(userName, origin_role);

Однако я ошибочно использовал команду.

Roles.DeleteRole(origin_role,false);

Изначально таблица имела 4 роли.Теперь у RoleId в таблице только два,

61572264-4935-461d-9d8c-71f147f28c34
c09f25e6-fd6a-447b-8e0d-eba0cfc94e40

Как их найти и восстановить?Большое спасибо.

Ответы [ 2 ]

1 голос
/ 04 января 2012

Ненавижу это говорить, но ты проклят. Поставщики ASP.Net по умолчанию не включают какой-либо аудит или мягкое удаление. Если у вас есть резервная копия базы данных, вы можете изучить / восстановить ее.

0 голосов
/ 04 января 2012

Ниже вы найдете исходный код для функции, которую вы вызвали.Он вызывает хранимую процедуру dbo.aspnet_Roles_DeleteRole.У меня нет доступа к базе данных членства asp.net в данный момент, иначе я бы проверил вас.Возможно, вы захотите проверить, что делает хранимая процедура, но, как упомянул ssyladin, я сомневаюсь, что вы сможете восстановить что-либо (поскольку вы отправили аргумент throwOnPopulatedRole в false).

public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");
            try {
                SqlConnectionHolder holder = null;

                try {
                    holder = SqlConnectionHelper.GetConnection(_sqlConnectionString, true);
                    CheckSchemaVersion( holder.Connection );

                    SqlCommand    cmd     = new SqlCommand("dbo.aspnet_Roles_DeleteRole", holder.Connection);

                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandTimeout = CommandTimeout;

                    SqlParameter p = new SqlParameter("@ReturnValue", SqlDbType.Int);
                    p.Direction = ParameterDirection.ReturnValue;
                    cmd.Parameters.Add(p);
                    cmd.Parameters.Add(CreateInputParam("@ApplicationName", SqlDbType.NVarChar, ApplicationName));
                    cmd.Parameters.Add(CreateInputParam("@RoleName", SqlDbType.NVarChar, roleName));
                    cmd.Parameters.Add(CreateInputParam("@DeleteOnlyIfRoleIsEmpty", SqlDbType.Bit, throwOnPopulatedRole ? 1 : 0));
                    cmd.ExecuteNonQuery();
                    int returnValue = GetReturnValue(cmd);

                    if( returnValue == 2 )
                    {
                        throw new ProviderException(SR.GetString(SR.Role_is_not_empty));
                    }

                    return ( returnValue == 0 );
                }
                finally
                {
                    if( holder != null )
                    {
                        holder.Close();
                        holder = null;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
...