0

asp.net Sqlmembership.GetAll()メソッド (ページング オーバーロード) を使用しています。結果をキャッシュするためにキャッシング レイヤーを追加したいのですが、総レコード数を返すGetAll メソッドのout パラメータに問題があります。データがキャッシュから取得されたときにtotalRecordsパラメータに値を割り当てるにはどうすればよいですか?

4

1 に答える 1

0

私の理解が正しければ、この小さな流れはあなたがあなたの目標を達成するのを助けるでしょう

これは基本的なフローです。

  1. キャッシュされたオブジェクトにアクセスする場合は、キャッシュプロバイダーに問い合わせてください
  2. オブジェクトがnullでない場合は、正しいタイプにキャストし、キャッシュ(この場合はユーザーのリスト)からオブジェクトを返します。終了プロセス
  3. オブジェクトがnullの場合、
    1. 元のソースからオブジェクトを取得します(GetAllメソッドを使用)
    2. 取得したオブジェクトをキャッシュに保存します
    3. 取得したオブジェクトを返します。終了プロセス

いずれにせよ、クラスではなくカスタムドメインクラスを使用することをお勧めしMembershipUserます

これは基本的な例です。

    public IEnumerable<DomainUser> GetDomainUsers()
    {
        var context = HttpContext.Current;
        var cache = context.Cache;
        var domainUsers = cache["domainUsers"] as IEnumerable<DomainUser>;

        if (domainUsers == null)
        {
            domainUsers = Membership.GetAllUsers().OfType<MembershipUser>().Select(x => new DomainUser
                {
                    Email = x.Email,
                    Username = x.UserName
                });

            cache.Insert(
                "domainUsers", // cache key
                domainUsers, // object to cache
                null, // dependencies
                DateTime.Now.AddMinutes(30), // absoulute expiration
                Cache.NoSlidingExpiration, // slading expiration
                CacheItemPriority.High, // cache item priority
                null // callback called when the cache item is removed
            );

            context.Trace.Warn("Data retrieved from its original source");
        }
        else
        {
            context.Trace.Warn("Data retrieved from cache");

        }

        return domainUsers;
    }
于 2012-09-15T07:46:50.563 に答える