Membership.DeleteUser()
私が削除しているユーザーのユーザープロファイルを削除することに成功しました。に保存されている情報も削除しないのはなぜですかwebpages_membership
。
現時点では役割を使用していないので、回答のために覚えておいてください。
Membership.DeleteUser()
私が削除しているユーザーのユーザープロファイルを削除することに成功しました。に保存されている情報も削除しないのはなぜですかwebpages_membership
。
現時点では役割を使用していないので、回答のために覚えておいてください。
テストを実行して、SimpleMembershipProvider.DeleteUserが宣伝どおりに機能しないことを確認しました。ドキュメントによると:
このメソッドは、メンバーシップ アカウント テーブル (デフォルトではwebpages_Membership ) のエントリを削除します。deleteAllRelatedDataが true の場合、ユーザー テーブルに保存されているすべてのユーザー データも削除されます。
しかし、私のテストでは、deleteAllRelatedDataを true に設定すると、UserProfileテーブルのエントリが削除され、webpages_membership のエントリはそのまま残りました。ドキュメントまたはSimpleMembershipの実装のバグです。
しかし、私は回避策を見つけました。最初にSimpleMembershipProvider.DeleteAccountを呼び出します。これにより、 webpages_membershipテーブルのエントリが削除されます。次に、SimpleMembershipProvider.DeleteUserを呼び出して、 UserProfileテーブルのエントリを削除します。これは、テストに使用したコードのスニペットです。
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);
コメントからわかるように、ロールを使用していて、そのユーザーにロールがマップされている場合、これは機能しません。ユーザーを削除する前に、それらを削除する必要があります。これが zms6445 の問題ではないことはわかっていますが、役割を使用している人々のためにこれを公開したかったのです。