2011-06-29 3 views
0

LINQ to SQLを使用して、いくつかのレポートストアドプロシージャを呼び出しています。LINQをSQL結果にキャッシュする方法は?

各ストアドプロシージャは、例えば、いくつかの入力パラメータを受け取り、クラスを返します。

public partial class csp_WeekCommencingListResult 
{   
    public static IEnumerable<csp_WeekCommencingListResult> GetAll(int? masterTrackingGroupId) 
    { 
     using (var dataContext = OscaDataContext.CreateWithCustomTimeOut()) 
     { 
      return dataContext 
       .csp_WeekCommencingList(masterTrackingGroupId) 
       .ToList(); 
     } 
    } 
} 

私は渡されたパラメータのために、ストアドプロシージャの結果をキャッシュすることができますか?

たとえば、このストアドプロシージャに1が渡されると、その結果は1日キャッシュされます。

どのような考えですか?私が使用できるフレームワークはありますか?または.NET Cacheオブジェクトを使用してストアドプロシージャごとに独自のカスタムキャッシュマネージャを構築する必要がありますか?おそらく、このコードを呼び出しているコードの例のために、より高いレベルでのキャッシングを追加する必要があります

おかげで、

+0

これはどのような用途ですか? –

+0

レポートアプリケーション。 –

答えて

0

あなたのプロジェクトで効果的なキャッシュ戦略を見つけようとしてください。

そして、それはキャッシュ・マネジャーに来るとき、私は通常使用ICacheManager城やのStructureMapのようないくつかの依存性注入フレームワークに注入し、私はプロパティMicrosoft EnterpriseLibrary Cachingから。そうすれば、私は異なる環境(dev、test、prodなど)ごとに異なる設定を実行できます。

+0

上位レベルはこれを直接使用するビューコードなので、上位レベルに置くことはできません。同じレベルに置かなければなりません。なぜなら、私はこれの上に新しいレベルを導入したくないからです。 –

+0

その場合は、IoCコンテナを使用している場合は、クラスにICacheManagerを挿入して起動します(またはファクトリを使用します)。考えておきたいのは、データを更新するときにキャッシュを無効にしたい場合があるため、キャッシュキーの名前付けです。 –

+0

私のキャッシュキーは複雑です。一方の方法は、それが最善の方法であるかどうかはわかりませんが、NameプロパティとParamsプロパティを持つComplexKeyクラスを定義し、JSONにメソッドを直列化および逆シリアル化し、次にこれを自分のキャッシュキーとして使用します。このようなシナリオでELキャッシングを使用するサンプルを知っていますか? –

関連する問題