2015-12-31 1 views
1

Est-ce une bonne pratique de mettre en cache l'objet EF Poco directement à l'aide de MemoryCache? Quels sont les inconvénients s'il y en a?cache les objets EF Poco est mauvais?

par exemple, je créé une catégorie appelée classe Poco

public partial class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }   
    public string Description { get; set; } 
} 

puis-je ajouter la liste de catégorie dans l'objet de cache qui est le type de MemoryCache comme ci-dessous

protected ObjectCache Cache 
{ 
    get 
    { 
     return MemoryCache.Default; 
    } 
} 

List<Category> data= getCategories(); 
Cache.Add(new CacheItem(key, data), policy); 

Ou est-il suggéré utiliser une autre classe de convertisseur entre et mettre en cache cette classe plutôt que la classe Poco elle-même?

+0

linq retardé l'exécution rendrait la pensée de plusieurs endroits de stockage pour vos données assez inconfortable - linq vous permet de toujours avoir vos données correctement quand vous en avez besoin, pendant que vous cachez les anciennes entrées et simulez probablement votre DbContext. – DevilSuichiro

+0

par exemple, les données que je veux mettre en cache, tout comme les catégories comme dans mon exemple, ne sont pas souvent modifiées. Peut-être 1 entrée dans un mois. Par conséquent, si je ne veux pas mettre à jour, supprimer mais seulement lire. et je peux rafraîchir le cache même une fois par semaine. Ces données sont considérées comme des données permanentes mises en cache. – batmaci

Répondre

2

Il n'y a rien de mal à mettre en cache les résultats d'un appel de base de données coûteux. Assurez-vous simplement que ces objets sont bien initialisés afin que plus tard lorsque vous essayez de les lire à partir du cache, ils n'ont pas besoin d'un DbContext ouvert. Le chargement différé d'EF pourrait vous piquer si vous n'avez pas complètement initialisé l'objet qui a été stocké dans le cache.

Assurez-vous également que vous disposez d'une bonne politique d'éviction de cache lorsque les données sont mises à jour. Avec le cache en mémoire, les choses peuvent être très, très, très difficiles si vous exécutez votre application dans une ferme Web. Pourquoi voulez-vous que vos objets POCO soient mis en cache?