Membership.DeleteUser不会删除用户的所有相关行

时间:2013-03-05 20:00:07

标签: c# asp.net-mvc-4 simplemembership

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

我现在没有使用角色,所以请记住你的答案。

1 个答案:

答案 0 :(得分:9)

我进行了测试,并确认SimpleMembershipProvider.DeleteUser无法正常宣传。根据文件:

  

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

但是在我的测试中,我将 deleteAllRelatedData 设置为true,它只删除了 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的问题,但我想把它放在那里使用角色的人。