【问题标题】:Membership.DeleteUser is not deleting all related rows of the userMembership.DeleteUser 没有删除用户的所有相关行
【发布时间】:2013-03-05 20:00:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    但在我的测试中,我将 deleteAllRelatedData 设置为 true,它只是删除了 UserProfile 表中的条目,而 webpages_membership 中的条目保持不变.文档中的错误或 SimpleMembership 的实现中的错误。

    但我确实找到了解决办法。第一次致电SimpleMembershipProvider.DeleteAccount。这将删除 webpages_membership 表中的条目。然后调用 SimpleMembershipProvider.DeleteUser 以删除 UserProfile 表中的条目。这是我用于测试的代码的 sn-p。

        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);
    

    正如您从 cmets 中看到的,如果您使用角色并且您将角色映射到该用户,这将不起作用。您需要先删除这些,然后才能删除用户。我知道这对 zms6445 来说不是问题,但我想将其发布给使用角色的人。

    【讨论】:

    • 如何访问方法 DeleteAccount 和 DeleteUser。我尝试了您的解决方法,在 SimpleMembershipProvider 类中我可用的唯一方法是 Equals 和 ReferenceEquals。
    • 我在答案中添加了我的测试代码。希望这能回答你的问题。如果它没有在您的问题中提供代码示例,那么我可以提供帮助。
    • 谢谢凯文,很好的回答。我添加到您的答案代码中以从角色中删除用户。 foreach (var role in Roles.GetRolesForUser("test")) Roles.RemoveUserFromRole("test", role); stackoverflow.com/questions/5439069/…
    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 2021-02-27
    • 1970-01-01
    • 2018-09-30
    • 2015-01-24
    • 2013-07-12
    • 2011-07-23
    • 2018-11-12
    相关资源
    最近更新 更多