2013-03-05 2 views

답변

9

나는 테스트를 실시하여 SimpleMembershipProvider.DeleteUser이 보급 된대로 작동하지 않음을 확인했습니다. 문서에 따르면

이 방법은 (기본적으로 webpages_Membership) 회원 계정 테이블에서 항목을 삭제합니다. deleteAllRelatedData이 true이면 사용자 테이블에 저장된 모든 사용자 데이터도 삭제됩니다.

그러나

내 시험에서 나는 참으로 에게 deleteAllRelatedData를 설정하고 그냥 그대로 webpages_membership에서 항목을 떠나는 USERPROFILE 테이블에서 항목을 삭제. 설명서의 버그 또는 구현시 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