Quelles sont les meilleures pratiques sur la gestion des connexions de base de données .NET?
Concernant les meilleures pratiques pour la gestion des connexions de base de données dans un .NET application, je sais que, en général, c'est mauvais pour la passer autour d'un objet de connexion.
Cependant, je voudrais faire quelques curiosités:
1. J'ai deux instances de l'entreprise
objets de classes différentes, dans un
relation parent-enfant (l'enfant
est privé.) Lequel des éléments suivants
est le meilleur?
- Garder une private static connexion ouverte et partagée, utilisée par les deux objets, et reste ouverte jusqu'à ce que le parent est supprimé.
- Garder deux private static connexions ouvertes, une pour chaque objet, de ne pas être
fermé jusqu'à ce que l'objet est supprimé. - Ne pas garder des connexions fixes; de l'ouverture et par la suite de fermer une nouvelle
connexion pour chaque méthode que l'exige. Cependant, la plupart de mes méthodes d'exécuter uniquement les 1-3 requêtes, donc cela semble inefficace... ?
2. Ma deuxième question est essentiellement le même, mais pour un seul formulaire. Ce qui est le mieux ici?
- Garder une private static connexion ouverte et partagée pour la durée de vie de la forme.
- Ne pas garder une connexion statique; de l'ouverture et par la suite de fermer une connexion pour chaque méthode dans le formulaire de demande (encore une fois, une simple 1-3 requêtes par la méthode.)
Est-ce un winform ou ASP.Net application?
La théorie est que vous ne devriez pas avoir accès à la base de données à partir de votre logique métier -, elle doit être séparée d'accès aux données de la classe. (Disons, par exemple, dans le futur, vous devez les stocker hors ligne dans le format XML, ou de l'utilisation d'Oracle plutôt que SQL Server... vous ne voulez pas de ré-écrire votre logique métier!). Va faire une réponse maintenant..
Je pense que vous devriez lire la question pour moi était un doublon. La question est différente, mais les réponses il y a en fait une réponse à votre question. Si vous ne pensez pas que les réponses, je parie que l'un de l'autre 239 questions avec le même tag répondrais.
Ne peux pas croire combien de gens sont ce qui suggère de garder un objet de connexion autour et vivant.. c'est juste pas le droit!
Johnstone: D'Accord. @Rob: je pense que vous devriez vraiment envisager pourquoi votre entreprise les objets de savoir quoi que ce soit sur une connexion de base de données.
La théorie est que vous ne devriez pas avoir accès à la base de données à partir de votre logique métier -, elle doit être séparée d'accès aux données de la classe. (Disons, par exemple, dans le futur, vous devez les stocker hors ligne dans le format XML, ou de l'utilisation d'Oracle plutôt que SQL Server... vous ne voulez pas de ré-écrire votre logique métier!). Va faire une réponse maintenant..
Je pense que vous devriez lire la question pour moi était un doublon. La question est différente, mais les réponses il y a en fait une réponse à votre question. Si vous ne pensez pas que les réponses, je parie que l'un de l'autre 239 questions avec le même tag répondrais.
Ne peux pas croire combien de gens sont ce qui suggère de garder un objet de connexion autour et vivant.. c'est juste pas le droit!
Johnstone: D'Accord. @Rob: je pense que vous devriez vraiment envisager pourquoi votre entreprise les objets de savoir quoi que ce soit sur une connexion de base de données.
OriginalL'auteur Rob | 2010-07-15
Vous devez vous connecter pour publier un commentaire.
(C'était un commentaire)...
La théorie est que vous ne devriez pas avoir accès à la base de données à partir de votre logique métier -, elle doit être séparée d'accès aux données de la classe. (Disons, par exemple, dans le futur, vous devez les stocker hors ligne dans le format XML, ou de l'utilisation d'Oracle plutôt que SQL Server... vous ne voulez pas de ré-écrire votre logique métier!)
Votre business objects ne devrait pas avoir de connexions de base de données associés. La connexion doit être ouvert dans certains DAL usine-type de méthode, l'objet récupéré/construit, puis la fermeture de la connexion et de l'objet renvoyé.
L'entreprise les objets eux-mêmes devraient contenir des affaires de la logique des champs et des méthodes, ce qui pourrait rappeler la Couche d'Accès aux Données, ce qui devrait créer une nouvelle connexion de base de données pour chaque DAL méthode.
Votre inefficacité craintes peuvent être mis au repos en utilisant le Regroupement de Connexion, ce qui signifie que si vous ouvrez et fermez une connexion des centaines de fois, les chances sont qu'ils vont tous utilisent le même. Mais vous ne devriez pas maintenir les connexions de base de données traîner à tous - et surtout pas en tant que membres d'une classe.
Espère que ça aide!
OriginalL'auteur Kieren Johnstone
Ma compréhension est que les connexions ne doit rester ouverte aussi longtemps que nécessaire. La plupart du temps j'ai vu des connexions à l'Aide d'instructions, semblable à
le point d'un pool de connexions est que le lien réel ne reçois ouvert et fermé. "Open" sera tout simplement obtenir un existant, ouvrez la connexion de la piscine.
OriginalL'auteur charachu
Ce lien peut être utile: Les meilleures Pratiques pour l'Utilisation de ADO.NET
Voici une intéressante extrait.
J'ai toujours suivi la pratique de l'ouverture des connexions à l'aide de bloc, de sorte que la méthode dispose (et donc la méthode Close) est toujours appelé sans m'en inquiéter. En utilisant cette approche, je n'ai jamais rencontré une situation où la mauvaise performance est liée soit à des excès de connexions simultanées ou excessif d'installation ou d'arracher des opérations.
OriginalL'auteur John M Gant
En réponse à ces deux questions, si vous utilisez quelque chose qui a une connexion de mise en commun, comme ADO.NET, vous devez coder vos requêtes pour garder la connexion ouverte comme court que possible. I. e.
open and subsequently close a new connection for every method that requires it.
. Lorsque vous fermez la connexion, il sera retourné à un pool de connexion et réutilisés sur une requête et donc vous n'encourra une pénalité de performances par l'ouverture et la fermeture d'un tas de connexions. L'avantage est que vous n'aurez pas de risque de fuite de connexions que vous avez oublié de fermer et dans le long terme, vous aurez moins de connexions simultanées ouvrir que si vous gardez les connexions ouvertes pendant de longues périodes de temps. Il n'importe pas de savoir si l'application est un formulaire Windows à la place d'un formulaire Web: garder les connexions ouvertes aussi court que possible.OriginalL'auteur Thomas