2009-03-10 6 views
1

J'ai un projet Web qui utilise une classe de configuration personnalisée pour stocker les paramètres de l'application dans web.config. Je fais cela pour pouvoir stocker et accéder aux paramètres de configuration dans web.config qui sont basés sur le nom du serveur. Ainsi, lorsque le projet passe du développement, à la mise en scène, à la production, je n'ai pas besoin de me souvenir de modifier les paramètres web.config comme la chaîne de connexion et d'autres paramètres qui peuvent différer d'un serveur à l'autre. Les classes récupèrent les paramètres de configuration corrects de web.config en fonction du serveur sur lequel il est déployé.Comment utiliser une classe de configuration personnalisée pour web.config avec les classes Linq dbml

Cela fonctionne plutôt bien. Cependant, maintenant j'ai converti le projet pour utiliser Linq en utilisant les classes dbml générées. C'est génial, mais les classes générées insistent pour utiliser une simple chaîne de connexion à partir de web.config. Comme ces classes sont générées automatiquement, je ne peux pas simplement changer le code pour utiliser mes classes de configuration personnalisées. Quelqu'un peut-il expliquer comment il serait possible que les classes générées appellent mon objet personnalisé pour récupérer la bonne chaîne de connexion?

Merci!

Répondre

1

Il serait préférable de fournir explicitement la chaîne de connexion au constructeur DataContext. De cette façon, votre application peut saisir la chaîne de connexion correcte via votre aide webconfig et le datacontext peut toujours être fourni avec la chaîne de connexion absolument correcte. Plutôt que de s'appuyer sur le contexte pour sélectionner celui qui convient dans le webconfig.

+0

C'est le moyen le plus simple. J'aurais dû réaliser que l'objet contexte accepte la chaîne de connexion en tant que paramètre. Merci! – user69889

+0

Pas de problème, je sais seulement parce que je suis passé par quelque chose de très similaire, bonne chance! –

0

Je n'ai pas la réponse mais vous voudrez peut-être jeter un oeil à l'exemple d'application StockTrader de Microsoft qui implémente un service de configuration central et je crois utilise Linq. Je ne l'ai pas regardé depuis longtemps, mais cela pourrait vous fournir la perspicacité que vous cherchez.

Désolé de ne pas avoir de réponse directe.

1

Une alternative:

L'élément <connectionStrings> du fichier web.config peut prendre un attribut configSource, qui spécifie le nom d'un fichier XML qui contient les données de cette section. Je l'ai mis en place comme:

<connectionStrings configSource="connections.config" /> 

Le mettre un connections.config distinct avec les informations spécifiques à l'environnement sur chaque PC.

0

On dirait que vous avez déjà obtenu une réponse, mais je pensais que je propose cette place:

public MyDataContext() : 
     base(global::System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString, mappingSource) 
{ 
    OnCreated(); 
} 

Vous pouvez modifier manuellement votre .designer.cs fichier de classe partielle et remplacer ce constructeur de contexte par défaut avec votre propre .

0

Vous pouvez simplement transmettre la chaîne de connexion en tant que paramètre au constructeur de votre classe DataContext.

Dans ce cas, récupérez simplement la chaîne de connexion comme vous le faisiez auparavant dans votre configuration et remettez-la lors de la création d'un DataContext.

Questions connexes