I'm missing a concept here. I was assuming that Membership.DeleteUser()
would expunge a user from my membership tables. My code:
// remove all but 'admin' from Membership
MembershipUserCollection users = Membership.GetAllUsers();
foreach ( MembershipUser user in users )
{
if ( user.UserName != "admin" )
{
Membership.DeleteUser( user.UserName );
}
}
DeleteUser()
fails with exception:
The DELETE statement conflicted with the REFERENCE constraint
"FK__aspnet_Me__UserI__58D1301D". The conflict occurred in database
"MyDatabase", table "dbo.aspnet_Membership", column 'UserId'.
The statement has been terminated.
In my Web.config:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MembershipConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="MyApplication"/>
</providers>
</membership>
I get it that there's a foreign key relationship between Membership.UserId -> Users.UserId
but would have assumed that the whole point of DeleteUser()
is to remove all the records for this user in the Membership
, User
and UsersInRoles
tables, to name a few.
Of course, I could go straight into the Membership
table and delete the appropriate record, but that's defeating the purpose of using the API. What am I doing wrong? What is the correct way to delete a user from the Membership tables?