【发布时间】:2013-03-05 20:00:06
【问题描述】:
Membership.DeleteUser() 设法删除了我正在删除的用户的用户配置文件。为什么它不删除它存储在webpages_membership 中的信息。
我目前没有使用角色,因此请记住这一点。
【问题讨论】:
标签: c# asp.net-mvc-4 simplemembership
Membership.DeleteUser() 设法删除了我正在删除的用户的用户配置文件。为什么它不删除它存储在webpages_membership 中的信息。
我目前没有使用角色,因此请记住这一点。
【问题讨论】:
标签: c# asp.net-mvc-4 simplemembership
我进行了测试并验证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 来说不是问题,但我想将其发布给使用角色的人。
【讨论】: