asp.net Sqlmembership.GetAll()メソッド (ページング オーバーロード) を使用しています。結果をキャッシュするためにキャッシング レイヤーを追加したいのですが、総レコード数を返すGetAll メソッドのout パラメータに問題があります。データがキャッシュから取得されたときにtotalRecordsパラメータに値を割り当てるにはどうすればよいですか?
1 に答える
0
私の理解が正しければ、この小さな流れはあなたがあなたの目標を達成するのを助けるでしょう
これは基本的なフローです。
- キャッシュされたオブジェクトにアクセスする場合は、キャッシュプロバイダーに問い合わせてください
- オブジェクトがnullでない場合は、正しいタイプにキャストし、キャッシュ(この場合はユーザーのリスト)からオブジェクトを返します。終了プロセス
- オブジェクトがnullの場合、
- 元のソースからオブジェクトを取得します(
GetAll
メソッドを使用) - 取得したオブジェクトをキャッシュに保存します
- 取得したオブジェクトを返します。終了プロセス
- 元のソースからオブジェクトを取得します(
いずれにせよ、クラスではなくカスタムドメインクラスを使用することをお勧めし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 に答える