28 votes

Enfer de chaîne de connexion dans .NET / LINQ-SQL / ASP.NET

J'ai une application web qui comprend les éléments suivants:

  • Un projet web (avec un site web.fichier de configuration contenant une chaîne de connexion - mais pas de code d'accès aux données dans le projet web)
  • Un accès aux données de projet qui utilise LINQ-SQL classes pour fournir des entités de projet web, l'INTERFACE utilisateur (ce projet est un fichier de paramètres et une application.config - qui ont toutes deux des chaînes de connexion)

Lorsque je créer et déployer, il n'y a pas de fichier de paramètres ou de l'application.config dans le répertoire Bin avec les données d'accès .dll, mais de modifier la chaîne de connexion dans le web.fichier de configuration ne change pas la base de données en conséquence - si la chaîne de connexion doit être compilé dans l'accès aux données dll.

Ce dont j'ai besoin est un fichier de configuration pour l'ensemble de ma déploiement de site web, l'accès aux données dll, tout ce qui a une chaîne de connexion utilisé. Pour le moment, il semble y avoir plusieurs chaînes de connexion s'habituer ou codé en dur dans tous les sens.

Comment puis-je résoudre ce gâchis?

Merci pour toute aide.

14voto

tvanfosson Points 268301

Je n'ai jamais eu un problème avec la Couche d'Accès aux Données (DAL), de pouvoir utiliser les chaînes de connexion de mon web.config le fichier. Habituellement, j'ai juste copier les chaînes de connexion section de la DAL et de le coller dans l' web.config. Je suis à l'aide de la DBML designer pour créer le contexte de données.

Si cela ne fonctionne pas pour vous, vous pouvez spécifier la chaîne de connexion dans le contexte des données constructeur. Dans votre projet web statique de la classe de chargement de vos paramètres, y compris vos chaînes de connexion, et lorsque vous créez votre DAL objet (ou le contexte des données, en cas de création d'directement) vient de passer dans le constructeur.

public static class GlobalSettings
{
    private static string dalConnectionString;
    public static string DALConnectionString
    {
       get
       {
           if (dalConnectionString == null)
           {
              dalConnectionString = WebConfigurationManager
                                      .ConnectionStrings["DALConnectionString"]
                                        .ConnectionString;
           }
           return dalConnectionString;
       }
    }
}
...

using (var context = new DALDataContext(GlobalSettings.DALConnectionString))
{
   ...
}

6voto

Robert Durgin Points 938

Le fichier de configuration du projet de démarrage définira les paramètres de configuration pour tous les projets inclus. Par exemple, si votre projet Web est le projet de démarrage, toute référence à "appSettings" recherchera les paramètres de web.config, cela inclut toutes les références à "appSettings" de votre projet d'accès aux données. Copiez donc tous les paramètres de configuration du fichier app.config du projet d'accès aux données vers le fichier web.config du projet Web.

5voto

Jason Kester Points 2111

Rouler vos propres ConnectionFactory basée sur le Registre:

  • ajouter une clé de registre de votre demande en vertu de LOGICIELS/[YOUR_COMPANY]/[YOUR_APP]
  • ajouter une valeur de chaîne pour ConnectionString
  • Enseignez à votre ConnectionFactory le crack ouvrir la clé de registre appropriée (dans un constructeur statique, pas à chaque chargement de la page!).
  • exporter le registre d'info que l'un .fichier reg, l'ajouter au contrôle de code source, de le modifier et de l'appliquer comme nécessaire de mettre en place de nouvelles machines.

Pro:

  • Simple à mettre en place
  • Connectionstring vit dans un lieu unique
  • Pas dans web/app.config, donc pas besoin de coder en dur l'environnement des paramètres spécifiques.
  • Pas dans web/app.config, donc les Dev Junior Jimmy ne peut pas accidentellement dire à votre serveur de production à regarder le DEV de la base de données

Con:

  • Pas tout de suite évident que les choses importantes sont vivants dans le registre, de sorte que les nouveaux développeurs auront besoin d'instructions.
  • Étape supplémentaire lors de la configuration d'une nouvelle machine de déploiement
  • Registre est oldskool. Junior devs vont se moquer de vous.

4voto

flesh Points 10516

Merci pour les réponses.

Ceux d'entre vous qui disent que l'application va utiliser le paramètre dans le web.config sont corrects pour le cas où j'en référence dans mon propre code:

_connectionString = ConfigurationManager.AppSettings["ConnectionString"];

..mais il y a un autre problème avec LINQ-SQL datacontexts - je pense qu'ils comprennent les connexions des chaînes dans la dll compilée pour une utilisation dans le constructeur sans paramètre. Comme tvanofosson dit, j'ai besoin de créer datacontexts par le passage d'une référence à la chaîne de connexion dans le web.config. Qui est l'endroit où j'étais dans un enchevêtrement :)

3voto

TGnat Points 2239

Votre application utilisera uniquement les entrées de configuration du fichier web.config. Vous pouvez placer le paramètre de configuration dll dans le fichier web.config tant qu'ils sont correctement structurés. Mon exemple est spécifique à VB en utilisant My Namespace, mais il vous donne une idée générale.

Dans le paret configSections du fichier de configuration, vous aurez besoin d'une entrée:

 <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
		<section name="YourAssembly.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup></configSections>
 

Ensuite, dans la partie applicationSettings du fichier de configuration, vous mettez les entrées pour chaque DLL:

     <applicationSettings>
	  <YourAssembly.My.MySettings>
	    <setting name="DebugMode" serializeAs="String">
		    <value>False</value>
	    </setting>
	  </YourAssembly.My.MySettings>
    </applicationSettings>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X