2013-03-05 2 views
2

Membership.DeleteUser() удаляет пользовательский профиль пользователя, который я удаляю. Почему он не удаляет информацию, хранящуюся в webpages_membership.Memberhip.DeleteUser не удаляет все связанные строки пользователя

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

ответ

9

Я проверил тест и подтвердил, что SimpleMembershipProvider.DeleteUser не работает, как рекламируется. Согласно документации:

Этот метод удаляет запись в таблице членство учетной записи (по умолчанию, webpages_Membership). Если значение deleteAllRelatedData истинно, все пользовательские данные, которые хранятся в таблице пользователя, также удаляются.

Но в моем тесте я поставил deleteAllRelatedData истина, и он просто удаляется запись в таблицеUserProfile, оставив запись в webpages_membership нетронутым. Либо ошибка в документации, либо в процессе внедрения SimpleMembership.

Но я нашел работу вокруг. Первый звонок SimpleMembershipProvider.DeleteAccount. Это приведет к удалению записи в таблице webpages_membership. Затем вызовите SimpleMembershipProvider.DeleteUser, чтобы удалить запись в таблице UserProfile. Вот фрагмент кода, который я использовал для моего теста.

var roles = (SimpleRoleProvider)Roles.Provider; 
    var membership = (SimpleMembershipProvider)Membership.Provider; 

    if (!roles.RoleExists("Admin")) 
    { 
     roles.CreateRole("Admin"); 
    } 
    if (membership.GetUser("test", false) == null) 
    { 
     membership.CreateUserAndAccount("test", "test"); 
    } 

    //Commented this out because you will get a foreign key 
    //error if you try to delete the user without removing the 
    //the mapping of the user to a role 
    //if (!roles.GetRolesForUser("test").Contains("Admin")) 
    //{ 
    // roles.AddUsersToRoles(new[] { "test" }, new[] { "admin" }); 
    //} 

    //This will delete the user information from webpages_membership 
    bool wasDeleted = membership.DeleteAccount("test"); 

    //This will delelet the user information form UserProfile 
    wasDeleted = membership.DeleteUser("test", true); 

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

+0

Как получить доступ к методу DeleteAccount и DeleteUser. Я попытался обходным путем, и единственными доступными мне способами в классе SimpleMembershipProvider являются Equals и ReferenceEquals. – zms6445

+0

Я добавил код для своего теста в ответ. Надеюсь, это ответит на ваш вопрос. Если он не предоставляет образцы кода в вашем Вопросе, я могу помочь. –

+0

Отличная работа! Это сработало отлично. – zms6445

Смежные вопросы