Existe-t-il un conflit lors de l'utilisation du cache de données et du chargement différé?
-
20-08-2019 - |
Question
Si je prévois d'utiliser la mise en cache des données, dois-je m'inquiéter des conflits lorsque j'utilise également un chargement différé? Il semble qu'avec linq je perds le contrôle de mes données.
La solution
LinqToSql et EntityFramework fournissent les deux fonctionnalités (chargement différé et mise en cache des données).
Par exemple, si vous chargez initialement un client, ce dernier sera mis en cache et si vous le redemandez, vous obtiendrez la même instance.
Si vous ne chargez pas les commandes d'un client lors de son chargement initial, la propriété Orders de cette instance de client sera dans un état non chargé. Lorsque vous chargez ces commandes, les instances de commande sont disponibles via cette propriété.
- LinqToSql chargera la propriété lors de sa première utilisation.
- EntityFramework chargera la propriété lorsque cela lui sera demandé (à l'aide de la méthode Load).
Dans les deux technologies, le contexte est la chose qui effectue la mise en cache ... donc, si vous utilisez plusieurs instances de contexte, vous pouvez observer différentes instances de clients qui représentent réellement le même client.
Répondez à vos questions dans les commentaires. Je parlerai de LinqToSql, mais cela devrait également fonctionner dans EntityFramework.
- Voici une explication de la mise en attente différée ou immédiate .
- Voici une une explication de l'identité de l'objet et de la mise en cache .
si je ferme le chargement différé, je le prends, la mise en cache des données fonctionnera toujours?
Oui, cela fonctionnera. Cependant, ils ne sont pas totalement indépendants.
- Voici comment désactiver la mise en cache (activé par défaut).
- Voici comment désactiver le chargement différé (activé par défaut). Lisez-le , car il explique comment ces fonctionnalités interagissent.
le vidage du cache de données dépend-il de l’évolution des données et de l’heure?
Il n'y a pas de vidage ni de réinitialisation du cache. Si vous voulez un nouveau cache, vous devez créer un nouveau DataContext. Chaque instance de DataContext a son propre cache.
- Il existe un moyen d'extraire le cache avec les modifications de la base de données, aussi appelé Actualiser .
- Il n'y a aucun moyen de transférer les modifications de la base de données vers le cache.