members.deleteuser () возвращает false - PullRequest
3 голосов
/ 21 ноября 2010

Я пытаюсь удалить пользователя asp.net из всех таблиц.
Когда я звоню:

bool isDeleted = Membership.DeleteUser(username, true);

isDeleted устанавливается в ложь;

Есть ли способ сказать, почему он не удаляет пользователя?

Ответы [ 5 ]

2 голосов
/ 15 марта 2012

Я нашел еще одну причину, по которой пользователь не может быть удален:
это также происходит, если вы измените (в aspnet_Users) UserName, но не LoweredUserName соответственно.
По крайней мере, так и произошломне:
как только я сменил и LoweredUserName, я наконец смог удалить пользователя.

1 голос
/ 09 января 2011

К сожалению, это выглядит, когда вы удаляете членство пользователя, даже если deleteAllRelatedData = true

, например

Membership.DeleteUser(UserName.Text, true);

Пользователь НЕ удален из таблицы dbo.aspnet_Users, что означает, что пользователь не сможет затем повторно зарегистрироваться с тем же именем (даже если у него будет другой GUID)

Я понимаю, что это намеренное поведение, хотя оно не имеет смысла для меня.

Однако следующая процедура удалит все следы из базы данных aspnet

CREATE PROCEDURE [dbo].[ASPNET_Member_DELETE_By_Name] 
    @UserNameToDelete nvarchar(255)
    AS
    BEGIN

    DECLARE @UserToDelete nvarchar(255)

    SELECT @UserToDelete = UserID 
    FROM aspnet_Users WHERE UserName = @UserNameToDelete)

    DELETE FROM aspnet_Profile WHERE UserID = @UserToDelete
    DELETE FROM aspnet_UsersInRoles WHERE UserID = @UserToDelete
    DELETE FROM aspnet_PersonalizationPerUser WHERE UserID = @UserToDelete
    DELETE FROM aspnet_Membership WHERE UserID = @UserToDelete
    DELETE FROM aspnet_Users WHERE UserID = @UserToDelete

    END

Однако это имеет ограничения, если вы используете членство в aspnet для нескольких приложений (как и я) с одной и той же базой данных - может возникнуть ситуация, когда один и тот же пользователь входит в несколько приложений с одним и тем же именем пользователя.

Для этого scenerio вам нужно будет ввести имя приложения и определить идентификатор приложения для пользователя до выполнения удаления.

Впервые я написал здесь, так что будьте осторожны ...

1 голос
/ 21 ноября 2010

Поставьте точку останова на этой строке кода и нажмите F8, чтобы войти в нее в режиме отладки.

0 голосов
/ 15 декабря 2010

Попробуйте удалить имя провайдера, у меня сработало, отправив только имя пользователя.

Я использую SharePoint 3.0 с FBA, когда пользователь удаляется из SharePoint, вы все равно можете найти его в базе данных FBA. Вот почему я использую эту функцию следующим образом:

bool deleteUserResult = Membership.DeleteUser (currentUserLogin, true); if (! deleteUserResult) генерирует новое исключение ("...);

надеюсь, это поможет, Дэмиен

0 голосов
/ 22 ноября 2010

Возможно, неправильное имя пользователя - либо имя не соответствует тому, что находится в базе данных, либо пользователя на самом деле нет в базе данных.

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

Единственная другая возможность, которую я вижу, это то, что вы изменили sproc aspnet_Users_DeleteUser и сломали его.

...