Comment faire pour effacer le DataContext de cache sur Linq to Sql
Je suis en utilisant Linq to Sql pour interroger une base de données, j'ai seulement utiliser Linq pour lire les données de la DB, et j'y apporter des modifications par d'autres moyens. (Cela ne peut être changé, c'est une restriction de l'Application que nous sommes à l'extension, à toutes les mises à jour doivent aller à travers son sdk).
C'est très bien, mais je rencontre quelques problèmes de cache, en gros, j'ai une requête d'une ligne à l'aide de Linq, puis-je le supprimer creux des moyens externes, puis-je créer une nouvelle ligne à l'externe si j'ai une requête qui ligne de nouveau à l'aide de linq j'ai eu l'ancien (cache) de données.
Je ne peut pas désactiver le Suivi d'Objet, car qui semble prévenir le contexte de données de chargement automatique associé propertys (Clés Étrangères).
Est-il un moyen pour effacer le DataContex cache?
J'ai trouvé une méthode sufring le net, mais il ne semble pas sûr: http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html
Qu'en pensez-vous? quelles sont mes options?.
OriginalL'auteur albertein | 2010-01-20
Vous devez vous connecter pour publier un commentaire.
Si vous voulez vous rafraîchir un objet spécifique, puis le Méthode Refresh() peut être votre meilleur pari.
Comme ceci:
Vous pouvez également passer un tableau d'objets ou un IEnumerable que le 2ème argument si vous avez besoin de rafraîchir plus d'un objet à la fois.
Mise à jour
Je vois de quoi vous voulez parler dans les commentaires, dans le réflecteur, vous voyez ce qui se passe à l'intérieur .Refresh():
La méthode que vous avez lié semble être votre meilleure option, le DataContext de la classe de ne pas fournir de toute autre manière de dégager une ligne supprimée. L'élimination des contrôles et à l'intérieur de la
ClearCache()
méthode...c'est vraiment juste la vérification de l'élimination et de l'appel deResetServices()
sur leCommonDataServices
dessous..le seul mauvais effet de compensation tout en attendant les insertions, mises à jour ou suppressions que vous avez mis en file d'attente.Il y a une option de plus, pouvez-vous tirer jusqu'à un autre DataContext pour n'importe quelle opération que vous faites? Il n'auriez pas de cache...mais qui implique un peu de calcul des coûts, de sorte que si l'attente d'insertion, de mise à jour et les suppressions ne sont pas un problème, je collerais avec le
ClearCache()
approche.Je vois ce que tu veux dire, tiré d'un projet de test ici...mise à jour de la réponse, nous l'espérons apaise certaines des préoccupations de sécurité autour de la méthode que vous avez trouvé.
Je n'ai pas de problème avec les modifications en attente depuis que j'ai changer tout en dehors de Linq, je vais vérifier. Merci
Je n'ai jamais remarqué le
Refresh
méthode - merci!J'ai eu un objet avec une "Cascade Null" clé étrangère. Après la suppression de la ligne de la table étrangère, j'ai dû actualiser l'objet avec OverwriteCurrentValues. Sinon, la clé étrangère avait encore une valeur et n'a pas la valeur null comme il était dans la base de données.
OriginalL'auteur Nick Craver
J'ai fait ce code pour bien dégager le "cache" des entités qui, se détachant.
Où Ctx sont mes Contexte.
OriginalL'auteur Tiago Gouvêa
Vous devriez être en mesure de simplement actualiser les ensembles de résultats à l'aide de cet objet. Ce ne serait pas tirer le cache jeu, mais effectivement de retour de la finale des résultats. Je sais que cela peut ne pas être aussi facile ou possible, en fonction de comment vous le programme d'installation de votre application...
HTH.
Bizarre, pourriez-vous poster quelques exemples de code?
OriginalL'auteur Brian Mains