1

vb.netアプリケーションの認証にメンバーシップとロールを使用しています。アプリケーションには約5つの役割があり、特定の役割が特定のプロファイル値を入力します。例として、ロールはストアであり、プロファイル値はストア番号です。もちろん、本社で働いている場合は店舗番号がないので気にしません。各店舗には複数の従業員を配置することもできます。

特定の店舗番号のユーザーを取得する必要があります。つまり、店舗番号101に属するユーザーだけにそのリストを表示させたいと思います。現在これを行っている方法は、すべてのユーザーを調べ、条件に一致するユーザーを並べ替えられたリストに追加することです。これは機能しますが、問題は約3,000人のユーザーを通過させ始めるときです。何か良いものになるのは遅くなるだけです。

どうやってそれを行う別の方法を見つけますか?後のバージョンの.netでメンバーシップとロールが変更されるのではないかと心配しているので、カスタムストアドプロシージャを実行したり、基になるクラスを変更したりすることは本当にしたくありません。

4

3 に答える 3

1

これは、実際にはSQLでフィルタリングしたい種類のものです。データの線形スキャンを回避して、必要な結果を得るためのトリックはないと思います。

SQLでこれを行うことができない場合は、2番目のリストを作成せずに、メインのユーザー配列を並べ替えて、気になるものだけを表示することができます。これにより、少なくともメモリのコピー時間を節約できます。

于 2008-09-16T19:25:10.423 に答える
0
    Public Shared Function LoadALLUsersInRole(ByVal Code As Integer, ByVal Role As String) As ArrayList
        Dim pb As ProfileBase
        Dim usersArrayList As New ArrayList
        Dim i As Integer
        Dim AllUsersInRole() As String = Roles.GetUsersInRole(Role)

        For i = 0 To AllUsersInRole.Length - 1

            pb = ProfileBase.Create(AllUsersInRole(i), True)

            'Check to see if the current user in the collect belongs to this Store.
            If CType(pb.GetPropertyValue("Store.Code"), Integer) = Code Then                    
                    usersArrayList.Add(AllUsersInRole(i))                   
            End If
            pb = Nothing
        Next

        Return usersArrayList
    End Function

それは私がそれをしている方法のサンプルコードです。SOL側でやりたくない理由は、メンバーシップと役割が変わらないという事実に大きく依存するからです。

于 2008-09-16T20:20:44.313 に答える
0

SQL Serverインスタンスに保存する組み込みの.NETロールマネージャーを使用していますか?基準を評価するために現在それらを調べているとき、ユーザーオブジェクトはどのような形式になっていますか?あなたがコードサンプルを投稿するなら、私は考えを持っています...

于 2008-09-16T19:23:34.250 に答える