3

Membership.DeleteUser()设法删除我正在删除的用户的用户配置文件。为什么它不也删除它存储在webpages_membership.

我目前没有使用角色,所以请记住这一点。

4

1 回答 1

9

我进行了测试并验证SimpleMembershipProvider.DeleteUser不像宣传的那样工作。根据文档:

此方法删除成员帐户表中的条目(默认情况下,webpages_Membership)。如果deleteAllRelatedData为 true,则存储在用户表中的所有用户数据也将被删除。

但是在我的测试中,我将deleteAllRelatedData设置为 true,它只是删除了UserProfile表中的条目,而没有触及 pages_membership 中的条目。文档中的错误或SimpleMembership的实现中的错误。

但我确实找到了解决办法。首先调用SimpleMembershipProvider.DeleteAccount。这将删除pages_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 的问题,但我想把它放在那里给使用角色的人。

于 2013-03-05T21:21:28.397 回答