Error deleting mvc 4 user using SimpleMembership

When I try to execute Membership.DeleteUser(string, bool) in an MVC 4 project, where I use the SimpleMembership provider, I get the following error message:

"The DELETE statement was contrary to the REFERENCE constraint Fk_UserId. The conflict occurred in the database Conductor_Basic3, table dbo.webpages_UsersInRoles, column UserId. The application was terminated."

The limits are set and correct, so I can not understand the error message. I guess I missed something.

Can someone explain this error to me?

+4
source share
5 answers

It looks like the webpages_Roles table has a link to a user, you must exclude the user from the role, and after that you can delete the user, try the following:

  Roles.RemoveUserFromRole("UserName","RoleName"); Membership.DeleteUser("UserName"); 

Or you can try a different approach: explicitly specify cascading deletion in your db as follows:

enter image description here

+8
source

The foreign key constraint does not seem to allow deleting rows from the user table, since they have the corresponding rows in the dbo.webpages_UsersInRoles tables. I am not very familiar with the default membership provider scheme, but you must make sure that you delete lines in dbo.webpages_UsersInRoles to get this error.

+2
source

you can try the following:

 [Authorize(Roles = "Admin")] [HttpPost] public ActionResult DeleteUser(int id) { var tmpuser = ""; var ctx = new UsersContext(); using (ctx) { var firstOrDefault = ctx.UserProfiles.FirstOrDefault(us => us.UserId==id); if (firstOrDefault != null) tmpuser = firstOrDefault.UserName; } string[] allRoles = Roles.GetRolesForUser(tmpuser); Roles.RemoveUserFromRoles(tmpuser,allRoles); //Roles.RemoveUserFromRole(tmpuser, "RoleName"); ((SimpleMembershipProvider)Membership.Provider).DeleteAccount(tmpuser); Membership.Provider.DeleteUser(tmpuser, true); Membership.DeleteUser(tmpuser, true); ctx = new UsersContext(); return View(ctx.UserProfiles.OrderBy(user => user.UserName).ToList()); } 
+2
source

Had the same problem and solved it by expanding @testCoder a bit.

 var rolesProvider = (SimpleRoleProvider)Roles.Provider; var roles = rolesProvider.GetRolesForUser(username); if (roles != null && roles.Length > 0) { rolesProvider.RemoveUsersFromRoles(new[] { username }, roles); } Membership.DeleteUser(username, true); 
+1
source

In addition to what testCoder was given, here is some implementation that worked fine for me ...

 Public Shared Sub DeleteUser(User As String) Dim UserRoles = Roles.GetRolesForUser(User) If UserRoles.Count > 0 Then Roles.RemoveUserFromRoles(User, UserRoles) DirectCast(Membership.Provider, WebMatrix.WebData.SimpleMembershipProvider).DeleteAccount(User) DirectCast(Membership.Provider, WebMatrix.WebData.SimpleMembershipProvider).DeleteUser(User, True) End Sub 
0
source

Source: https://habr.com/ru/post/1441006/


All Articles