en passant DB objet de Connexion à des méthodes
Me demandais si il est recommandé de passer à une connexion de base de données objet(pour les autres modules) ou laissez-la méthode (dans l'autre module) prendre soin de sa mise en place. Je me penche vers à laisser la méthode de le configurer pour ne pas avoir à vérifier l'état de la connexion avant de l'utiliser, et juste avoir l'appelant passer toutes les données nécessaires à l'appel de la méthode qui seraient nécessaires à l'installation de la connexion.
Vous devez vous connecter pour publier un commentaire.
Personnellement, j'aime utiliser étroitement l'étendue des connexions; ouvrir tard, les utiliser, et de les fermer (dans "l'aide" de bloc, le tout dans les locaux de la méthode). Le regroupement de connexions traiter avec la ré-utilisation de la connexion dans la plupart des cas, donc ce n'est pas de surcharge dans cette approche.
Le principal avantage en passant connexions utilisé être de sorte que vous pouvez passer à la transaction, autour de; cependant,
TransactionScope
est un moyen simple de partager une transaction entre les méthodes.Depuis les classes de mise en œuvre spécifiques, allais-je écrire à chacun d'ouvrir son propre natif de la transaction. Sinon, vous pouvez utiliser le ado.net usine de méthodes pour créer le type approprié dans le fichier de configuration (le nom du fournisseur).
Personnellement, j'aime ranger une pile de ma connexion ouverte et les transactions sur le dessus de la Thread Local Storage à l'aide de SetData et GetData. Je définir une classe qui gère mes connexions à la base de données et de l'autoriser à utiliser le modèle dispose. Ce qui me sauve la nécessité de transmettre les connexions et les transactions autour de, ce qui est quelque chose que je pense encombre et complique le code.
Je vous recommande fortement de contre en laissant à l'méthodes pour ouvrir les connexions à chaque fois qu'ils ont besoin de données. Il conduit à une très mauvaise situation où il est difficile de gérer les transactions tout au long de l'application et de trop nombreuses connexions sont fermées et ouvertes (je sais que sur le regroupement de connexions, il est encore plus coûteux pour rechercher une connexion à partir de la piscine que c'est de réutiliser un objet)
Donc je finis par avoir quelque chose le long de ces lignes (totalement non testé):
Pour le test automatisé, il est habituellement plus facile de le faire passer dans. Ceci est appelé l'injection de dépendance.
Lorsque vous avez besoin d'écrire des tests, vous pouvez créer un simulacre de connexion de base de données objet et le passer à la place de la vraie. De cette façon, vos tests automatisés de ne pas s'appuyer sur une base de données qui doit être rempli avec les données à chaque fois.
Personnellement, je travaille pour centraliser mes données d'accès autant que possible, cependant, si pas possible, j'ai TOUJOURS ouvrir une nouvelle connexion dans les autres classes, car je trouve qu'il y a trop d'autres choses qui peuvent obtenir de la manière lors du passage de la connexion réelle de l'objet.
Ici est un peu plus de perspicacité dans ce problème. J'ai une classe qui gère db connections, et avoir 2 classes qui implémentent une interface. L'une des classes est pour SQL et l'autre est de l'OLAP. Le manager est celui qui sait la connexion à utiliser, de sorte qu'il pourrait passer le exacte de connexion pour le type ou le type peut créer sa propre connexion.
Vous pouvez passer des objets de connexion sans problème (par exemple, Microsoft Enterprise Library permet de statique des appels de méthode en lui passant une connexion) ou vous pourrait-il gérer en externe à votre design, il y a pas de technique directe de compromis.
Attention pour des raisons de portabilité, de ne pas passer d'une connexion spécifique si votre solution va être porté à d'autres bases de données (ce qui signifie ne pas passer une occurrence de SqlConnection il vous prévoyez de travailler avec d'autres bases de données)
La configuration de la connexion est potentiellement coûteux et potentiellement ajoute un aller-retour. Donc, encore une fois, peut-être même le meilleur de la conception est de passer de la connexion de l'objet.
Je dis potentiellement, parce que si vous êtes un Microsoft ADO app, vous êtes probablement à l'aide d'un pool de connexions....
Je voudrais vous suggérer de distinguer entre la connexion de l'objet et de son état (ouvert, fermé).
Vous pouvez avoir une seule méthode (ou des biens) qui lit la chaîne de connexion à partir du web.config. En utilisant la même version de la chaîne de connexion à chaque fois, vous garantit des prestations à partir d'une connexion de mise en commun.
Appeler cette méthode lorsque vous en avez besoin pour ouvrir une connexion. Au dernier moment, après la mise en place de tous les SqlCommand propriétés, ouvrez la connexion, l'utiliser, et puis fermez-le. En C#, vous pouvez utiliser l'instruction à l'aide à s'assurer que la connexion est fermée. Sinon, assurez-vous de fermer la connexion dans un bloc finally.
Je voudrais utiliser le web.config
Ensuite, vous pouvez référencer à partir de n'importe où dans l'application