3

Membership.DeleteUser()私が削除しているユーザーのユーザープロファイルを削除することに成功しました。に保存されている情報も削除しないのはなぜですかwebpages_membership

現時点では役割を使用していないので、回答のために覚えておいてください。

4

1 に答える 1

9

テストを実行して、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 の問題ではないことはわかっていますが、役割を使用している人々のためにこれを公開したかったのです。

于 2013-03-05T21:21:28.397 に答える