2010-10-15 5 views
10

de base Si j'ai un cadre entité 4 contexte, normalement si j'exécuter une requête comme:Entity Framework 4 - éviter la mise en cache

db.Invoices.Where(I => whatever); 

puis exécutez plus tard quelque chose d'autre:

db.Invoices.Where(I => something_else); 

tout Les objets renvoyés par la deuxième requête, qui ont également été retournés par le premier, ne seront pas chargés à partir de la base de données. EF prendra juste l'objet qu'il a déjà pour cette clé. Question, quelle est la meilleure façon de désactiver cette fonctionnalité? Puis-je demander à EF de charger tous les objets dont il a besoin dans la base de données sans exception?

Merci!

Répondre

9

Vous devez modifier le paramètre MergeOption pour votre entité, par ex.

db.Invoices.MergeOption = MergeOption.OverwriteChanges; 

OverwriteChanges signifie que les objets sont toujours chargés à partir de la source de données. Vous pouvez également utiliser NoTracking pour désactiver complètement le suivi, ce qui peut améliorer les performances si vous n'avez pas besoin de mettre à jour les données ou de réutiliser les requêtes. La valeur par défaut est AppendOnly qui a le comportement que vous avez observé.