Le contexte Entity Framework doit-il être mis en utilisant l'instruction?

c# entity-framework

Question

L'objet de contexte Entity Framework implémente une méthode Dispose () qui "Libère les ressources utilisées par le contexte de l'objet". Qu'est-ce que ça fait vraiment? Pourrait-il être une mauvaise chose de toujours le mettre dans une instruction using {}? Je l'ai vu être utilisé avec et sans la déclaration using.

Je vais spécifiquement utiliser le contexte EF à partir d'une méthode de service WCF, créer le contexte, effectuer un peu de linq et renvoyer la réponse.

EDIT: Il semble que je ne suis pas le seul à me poser des questions à ce sujet. Une autre question concerne ce qui se passe réellement dans la méthode Dispose (). Certains disent qu'il ferme les connexions, et certains articles dit non. Quel est le problème?

Réponse acceptée

Si vous créez un contexte, vous devez le disposer plus tard. Si vous devez utiliser l'instruction using dépend de la durée de vie du contexte.

  1. Si vous créez le contexte dans une méthode et ne l'utilisez que dans cette méthode, vous devez réellement utiliser l'instruction using car elle vous permet de gérer les exceptions sans code supplémentaire.

  2. Si vous utilisez le contexte pendant une période plus longue - c'est-à-dire que la durée de vie n'est pas liée par le temps d'exécution d'une méthode - vous ne pouvez pas utiliser l'instruction using et vous devez appeler vous-même Dispose() et veiller à le faire toujours.

Que fait Dispose() pour un contexte d'objet?

Je n'ai pas examiné le code, mais au moins, je m'attends à ce qu'il ferme la connexion à la base de données avec ses sockets sous-jacents ou les ressources utilisées par le mécanisme de transport.


Réponse populaire

Perpramming Entity Framework : "Vous pouvez soit explicitement supprimer le ObjectContext, soit attendre que le ramasse-miettes effectue le travail."

En bref, bien que l'instruction using ne soit pas requise, il est préférable de savoir si vous avez fini d'utiliser ObjectContext, car la ressource est immédiatement libérée au lieu d'attendre le garbage collection.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow