2009-08-20 9 views
1

Je réfléchissais depuis un moment à la meilleure façon de mettre en cache les IQueryables. J'utilise un modèle référentiel pour récupérer les données dans une classe comme celle-ci:Stratégies de cache utilisant 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 
} 

Maintenant, comment pourrais-je mieux s'y prendre pour mettre en cache cet objet? Je voudrais garder l'exécution différée sur l'interrogeable car en réalité il y a beaucoup plus de choses que la Catégorie qui peuvent être liées à l'objet, et je ne les chercherais pas pour les stocker sur l'objet car les objets peuvent devenir trop gros, ou ils pourraient avoir besoin d'être mis en cache séparément.

Je pense qu'un Compiled Query pourrait rendre cela possible d'une manière ou d'une autre, je ne vois tout simplement pas comment. Quelqu'un at-il trouvé une bonne solution à cela? Il semble être un modèle assez commun à utiliser.

Répondre

1

À l'aide d'une requête compilée, vous mettriez en cache le délégué résultant, de type Func<MyDataContext, IQueryable<Category>>. Chaque fois que vous voulez une nouvelle requête, vous créez simplement un nouveau contexte de données pour passer dans le délégué et interrogez le résultat IQueryable<Category> comme d'habitude.

Questions connexes