Membership.DeleteUser(UserName,true)不从角色中删除用户

当我单击“删除”链接按钮时,它可以从我的“JobPost.mdf”中的“UserDetail”表中删除所有用户信息,它还会删除相应的“aspnet_Users”和“aspnet_Membership”,但“UserInRole”仍然包含那个UserName。 即使我指定了Code:Membership.DeleteUser(UserName,true);

我认为true是bool deleteallrelated数据,但它并没有真正删除userInRole。 因此,下次用户使用相同名称注册时,它会自动获得“admin”角色。

这个“deleteUser”页面我将它保存在受保护的“admin”文件夹中。

怎么解决? 为什么Membership.DeleteUser(UserName,true)不会删除UserInRole?

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Delete") { string UserName = e.CommandArgument.ToString(); Membership.DeleteUser(UserName, true); JobPostDataContext db = new JobPostDataContext(); var query = from u in db.UserDetails where u.UserName == UserName select u; foreach (var item in query) { db.UserDetails.DeleteOnSubmit(item); } db.SubmitChanges(); FormsAuthentication.SignOut(); } } 

我在受保护的Admin文件夹中的web.config:

         

UserInRole表包含两个Guid字段。 用户名未存储。 每当创建新用户时,都会为他们分配一个新的,完全唯一的UserId

为什么您认为用户角色关联没有被删除? 您可以通过执行SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}的查询来准确测试。

我在下面包含了ASP.NET成员资格SQL数据库模式供您参考。 在此处输入图像描述

此外, Roles API允许您手动删除角色。 因此,删除给定用户的所有角色会像下面这样:

 void DeleteUserRoles(string username) { foreach (var role in Roles.GetRolesForUser(username)) Roles.RemoveUserFromRole(username, role); }