Кэширование стратегий с использованием IQueryables - PullRequest
1 голос
/ 20 августа 2009

Я некоторое время размышлял, как лучше всего кэшировать 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
}

Теперь, как мне лучше кэшировать этот объект? Я хотел бы сохранить отложенное выполнение для запрашиваемого, так как в действительности есть много других вещей, кроме Category, которые могут быть связаны с элементом, и я бы не стал выбирать их для хранения на объекте, поскольку объекты могут стать слишком большими, они могут быть кэшированы отдельно.

Я думаю, Скомпилированный запрос мог бы как-то это сделать, я просто не совсем понимаю, как это сделать. Кто-нибудь нашел хорошее решение для этого? Кажется, это довольно распространенный шаблон для использования.

1 Ответ

1 голос
/ 20 августа 2009

Используя скомпилированный запрос, вы бы кэшировали полученный делегат типа Func<MyDataContext, IQueryable<Category>>. Всякий раз, когда вы хотите новый запрос, вы просто создаете новый контекст данных для передачи в делегат и запрашиваете полученный результат IQueryable<Category>, как обычно.

...