2010-09-29 6 views
4

Si j'ai exécuté plusieurs requêtes et que ObjectContext a été rempli avec des entités, comment puis-je effacer le contexte si je n'ai plus besoin de ces entités? Je sais que je dois disposer du contexte le plus tôt possible, mais dans ce cas ce n'est pas possible. Donc est-il possible de retirer ces objets du contexte?Comment effacer le contexte d'objet

+0

Possible duplicate: http://stackoverflow.com/questions/3774395/how-to-clear-contents-of-objectcontext-in-entity-framework-1-0 – Yakimych

Répondre

1

Vous pouvez essayer de Detach chaque entité dans le contexte.

+0

J'ai d'abord pensé à ça, mais j'étais en espérant qu'il y a un meilleur moyen. Je suppose qu'il n'y en a pas. – Max

11

Il n'existe aucune méthode pour "effacer" ObjectContext. La seule façon de le faire est de Disposer l'instance actuelle de ObjectContext et de démarrer la nouvelle instance.

0

Vous pouvez essayer de Détacher chaque entité dans le contexte. Max a raison, mais quand vous voulez faire quelque chose qui prend beaucoup de temps, le contexte stocke beaucoup d'objets et continue de grandir en mémoire, et rend votre application lente.

Appelé par une mémoire de fuite.

J'ai maintenant ce problème avec l'EntityFramework 6, mais je ne sais pas comment "exactement" le réparer.

Toujours que j'ai besoin de faire une requête, je lève le contexte et le fais, mais cette action est différente, j'ai beaucoup de choses à calculer, en boucle, et je garde le contexte jusqu'à la fin. Pour le moment, je suis en train de disposer de ma liste après le flush, mais j'ai toujours une mémoire de fuite dans mon système, et le contexte a certainement ce problème. Toute suggestion "équipe"? Je ne connais pas le cadre de l'entité.

+0

Cela ne semble pas une réponse à la question, il ne résout pas le problème. Mieux vaut l'écrire comme un commentaire – abarisone

+0

J'ai essayé, croyez-moi, mais ma réputation est faible. Pardon ! –

+1

Si vous trouvez que votre Contexte est en croissance et en croissance lorsque vous chargez plus d'entités dedans ... et vous n'avez pas besoin d'enregistrer des changements sur ces entités (peut-être vous les chargez simplement pour lire des valeurs ou les utiliser dans d'autres calculs, mais vous ne les modifiez pas que vous avez besoin de sauvegarder dans la base de données), bien, vous pouvez utiliser la méthode AsNoTracking() sur la requête pour dire à EF de ne pas les suivre, et cela économisera beaucoup de mémoire. Voir ici: https://msdn.microsoft.com/en-us/data/jj556203.aspx – MattSlay