0

システムにログインできる従業員のリストをビジネスに表示する必要があるシステムがあります。したがって、ID で MembershipUsers のリストを取得する必要があります。それは可能ですか?私が見るのはメンバーシップの GetAllUsers() メソッドだけですが、それが機能するとは本当に思いません。各ビジネスには独自の従業員リストがあるため、何千ものユーザーが存在しますが、毎回必要なのはそのほんの一部 (おそらくビジネスごとに約 40) だけです。特定のサブセットを再度照会するためだけに何千もの行を戻すのは、処理の無駄のようです。ただし、ループしてそれぞれを個別に取得するには、最大で 8 秒かかります。私の現在のコードは以下の通りです:

       foreach (int userAccountID in ListOfEmployeeIDs)
       {
            MembershipUser membershipUser = Membership.GetUser(userAccountId);
            if (membershipUser != null)
            {
                dto.Username = membershipUser.UserName;
                dto.Email = membershipUser.Email;
                dto.Password = membershipUser.GetPassword();
            }

            //Include User's Roles
            dto.Roles = Roles.GetRolesForUser(dto.Username);
       }

必要なすべてのユーザーを一気に取得できるものはありますか (ロールも必要です)。明らかな何かが欠けていますか?Membership クラスに含めるのは論理的な方法のように思えます。

必要なすべての特定のユーザーを一度に取得する方法が絶対にない場合、誰かがそれらをすばやく取得する方法を教えてもらえますか? 私のループは、ユーザーを取得するのに時間がかかるように何か間違ったことをしていますか?

ありがとう!

4

1 に答える 1

0
MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, 
   out int totalRecords)

MembershipUserCollection FindUsersByName(string usernameToMatch, 
   int pageIndex, int pageSize, out int totalRecords)

MembershipUserCollection FindUsersByEmail(string emailToMatch, 
   int pageIndex, int pageSize, out int totalRecords)

メンバーシップ プロバイダーは、 を返す 3 つのメソッドのみを提供しますMembershipUserCollection

残念ながら、それはありませんFindUsersById

GetUser使用している方法は、GuidID を受け入れる唯一の方法です。

MembershipUser GetUser(object providerUserKey, bool userIsOnline)

したがって、独自のサービス クラスを作成しない限り、他のオプションはありません。

于 2013-08-02T19:10:20.683 に答える