33

私たちは、DAL の作業で LINQ to SQL の使用を開始したばかりであり、アウト キャッシュ モデルの標準を実際に考え出すことはできませんでした。以前は、すべての DAL クラスが継承するキャッシュ マネージャー プロパティを実装する基本「DAL」クラスを使用していましたが、現在はそれがありません。誰かが LINQ to SQL の結果をキャッシュするための「標準的な」アプローチを思いついたのだろうか?

それが違いを生む場合、私たちはWeb環境(IIS)で作業しています。これが主観的な質問になる可能性があることは承知していますが、それでも情報は価値があると思います.

編集:明確にするために、個々の結果をキャッシュすることについて話しているのではなく、すべてのリンクメソッドが同じキャッシュアーキテクチャを使用するようにキャッシュを設定する方法など、アーキテクチャソリューションを求めています。

4

6 に答える 6

39

私のLINQクエリ結果キャッシュは、おそらくあなたが探しているものです。

var q = from c in context.Customers
        where c.City == "London"
        select new { c.Name, c.Phone };

var result = q.Take(10).FromCache();

ピート。

于 2008-12-10T23:18:02.267 に答える
10

簡単な答え:リポジトリパターン(Evansによるドメイン駆動設計を参照)を使用して、エンティティをフェッチします。各リポジトリは、保持するものをキャッシュします。理想的には、リポジトリの各インスタンスにシングルトンキャッシュへのアクセスを許可します(各スレッド/リクエストは新しいリポジトリをインスタンス化しますが、キャッシュは1つしかありません)。

上記の回答は、1台のマシンでのみ機能します。多くのマシンでこれを使用できるようにするには、キャッシュソリューションとしてmemcachedを使用します。幸運を!

于 2008-09-01T07:55:00.320 に答える
4

それはあなたの鼻のすぐ下です:

List<TableItem> myResult = (from t in db.Table select t).ToList();

ここで、古いDALから返されたデータをキャッシュするのと同じように、myResultをキャッシュします。

于 2008-09-01T03:53:12.680 に答える
1

これはおそらく少し遅い答えだと思います...それでもなお、LinqToCacheプロジェクトを試すことができます。可能であれば、任意の LINQ クエリで SqlDepdency をフックし、サーバー側のクエリ通知を介してアクティブなキャッシュの無効化を提供します。クエリは、通知用の有効なクエリである必要があります。通知用のクエリの作成 を参照してください。dbo.Tableほとんどの Linq-to-sql クエリは、テーブルが 2 部構成の名前 (だけでなく)を使用して指定されている限り、これらの制限に準拠していますTable

于 2010-08-02T03:43:46.303 に答える
1

LINQ オブジェクトをキャッシュする手段として拡張メソッドを提供するこの投稿を見つけました。

私は今、Linq2SQL の優れたキャッシング ソリューションを見つけようとして、弱者のために壁に頭をぶつけてきました。

リポジトリ パターンは、(IQueryable を再実装することなく) キャッシングを Linq ステートメントの外部で実行する必要があるため、Linq の有用性を制限する傾向があります。

さらに、遅延ロードとオブジェクト トラッキングはどちらも、オブジェクトをキャッシュする場合には絶対に避けてください。

並行性の高い Web プロジェクトでこの問題を実際に解決した人は誰でも、声をかけて世界を救ってください! :)

于 2010-05-21T02:07:46.380 に答える
0

この記事の「ReferenceData」クラスの「GetReferenceData」メソッドを参照してください: http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access-層-動的-linq/

L2S を使用して取得したデータをキャッシュするために asp.net ページ キャッシュを使用します。

于 2008-12-11T03:39:20.727 に答える