7
votes

DBContext et pools de connexion

Dans une application que j'ai héritée, il y a ceci dans un contrôleur de base, que tout autre contrôleur de l'application hérite de. xxx

en raison de la manière dont l'application a été conçue, à moins 2 contextes sont créés par demande. (C'est une application MVC et il y a un appel au Homecontroller sur chaque page et tout ce que d'autres contrôleurs sont appelés à une page particulière.)

Ma question est quand le dbcontext crée-t-il une connexion à SQL Server? Est-ce immédiatement lorsque le contexte est créé ou seulement lorsqu'une requête est exécutée?

Si c'est le premier, j'utiliserai 2 deux fois le nombre de connexions sur SQL Server que si c'est nécessaire, et s'il est nécessaire de Ce dernier, ce n'est probablement pas trop d'un problème.

Je ne pense pas pouvoir refroidir cela dans l'avenir immédiat, certainement pas sans justification. Quels pièges potentiels de cette conception devrais-je être au courant?

Cadre d'entité 6.1.3


2 commentaires

Quelle version de EF est-ce? Et pouvez-vous nous montrer dbcontext


Mise à jour de la question


3 Réponses :


1
votes

La connexion n'est ouverte que lorsqu'une requête est exécutée. Le pool de connexion est géré par les classes Ado.net (SQLConnection). Avoir plusieurs instances DBContext par demande est correcte et est parfois nécessaire. Vous n'aurez pas deux fois de connexions en général.


0 commentaires

3
votes

Frame-entité fait suite au principe précoce fin et proche de la fin. Donc, cela ne ouvre que la connexion lorsqu'elle a besoin également, c'est-à-dire pour matérialiser une requête, puis la ferme dès qu'elle le peut.

Si vous le pouvez, vous devez passer à un seul instance de contexte par demande. Cela maintient également tout ce qui se passe pendant la demande dans une seule transaction. Vous pouvez le faire assez facilement si vous utilisez un conteneur d'injection de dépendance pour instancier vos contrôleurs.


0 commentaires

4
votes

Parce que vous n'essayez pas de créer et de transmettre une connexion vous-même dans votre constructeur de votre contexte, oui, comme d'autres disent, EF obtiendra / libérer des connexions à partir d'un pool de connexion selon vos besoins, et non lorsqu'il est construit.

Notez cette citation de la documentation EF:

connexions

Par défaut, le contexte gère les connexions à la base de données. Le contexte ouvre et ferme les connexions au besoin. Par exemple, le contexte ouvre une connexion à exécuter une requête, puis ferme la connexion lorsque tous les ensembles de résultats ont été traités.

Il y a des cas lorsque vous souhaitez avoir plus de contrôle lorsque la connexion s'ouvre et se ferme. Par exemple, lorsque vous travaillez avec SQL Server Compact, l'ouverture et la fermeture de la même connexion est chère. Vous pouvez gérer ce processus manuellement en utilisant la propriété de connexion.

Voir les liens suivants pour plus d'informations:

https://msdn.microsoft.com/en-us/data/jj729737

https://msdn.microsoft.com/en-us/data/dn456849


0 commentaires