1

IQueryablesを最適にキャッシュする方法については、しばらく考えていました。リポジトリパターンを使用して、次のようなクラスにデータをフェッチしています。

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Category> { get; set; } // For simplicity. It is actually a LazyList<Category> containing an IQueryable
}

では、このオブジェクトをキャッシュするにはどうすればよいでしょうか。実際には、アイテムにリンクできるカテゴリ以外にも多くのものがあるため、クエリ可能での遅延実行を維持したいと思います。オブジェクトが大きくなりすぎる可能性があるため、オブジェクトに格納するためにそれらをフェッチしないことをお勧めします。それらは別々にキャッシュする必要があるかもしれません。

コンパイルされたクエリがこれを何らかの形で可能にする可能性があると私は考えていますが、その方法がよくわかりません。誰かがこれに対する良い解決策を見つけましたか?使用するのはかなり一般的なパターンのようです。

4

1 に答える 1

1

Using a compiled query, you would cache the resulting delegate, of type Func<MyDataContext, IQueryable<Category>>. Whenever you want a new queryable, you just create a new data context to pass into the delegate and query against the resulting IQueryable<Category> like normal.

于 2009-08-20T17:04:07.167 に答える