Nous avons une fonction personnalisée AppSettings.GetConnectionString()
qui est toujours appelé pour déterminer la chaîne de connexion qui doit être utilisée. Le fonctionnement de cette fonction n'a pas d'importance pour la discussion. Il suffit de dire qu'elle renvoie une chaîne de connexion et que je dois l'utiliser.
Je veux que mon DataContext LINQ to SQL l'utilise, j'ai donc supprimé toutes les informations de la chaîne de connexion du fichier dbml et j'ai créé une classe partielle avec un constructeur par défaut comme ceci :
public partial class SampleDataContext
{
public SampleDataContext() : base(AppSettings.GetConnectionString()) { }
}
Cela fonctionne bien jusqu'à ce que j'utilise le concepteur pour glisser et déposer un tableau dans le diagramme. Le fait de faire glisser un tableau dans le diagramme entraîne plusieurs effets indésirables :
- Un fichier de paramètres sera créé
- Un fichier app.config sera créé
- Mon fichier dbml contiendra la chaîne de connexion.
Tout cela est fait avant même que je n'enregistre le fichier !
Lorsque je sauvegarde le diagramme, le fichier du concepteur est recréé et il contient son propre constructeur par défaut qui utilise la mauvaise chaîne de connexion. Bien sûr, cela signifie que mon DataContext a maintenant deux constructeurs par défaut et que je ne peux plus construire !
Je peux défaire toutes ces mauvaises choses mais c'est ennuyeux. Je dois supprimer manuellement la chaîne de connexion et les nouveaux fichiers après chaque modification !
Existe-t-il un moyen d'empêcher le concepteur d'effectuer ces modifications sans me le demander ?
EDIT
L'obligation d'utiliser le AppSettings.GetConnectionString()
Cette méthode m'a été imposée assez tard dans le jeu. J'avais l'habitude d'utiliser quelque chose de très similaire à ce qu'elle génère pour moi. Il y a pas mal d'endroits qui appellent le constructeur par défaut. Je suis conscient que je devrais tous les modifier pour créer le contexte de données d'une autre manière (en utilisant un constructeur différent, une méthode statique, une usine, etc.) Ce type de changement ne serait que légèrement gênant puisqu'il ne devrait être effectué qu'une seule fois. Cependant, j'ai l'impression que c'est éluder le vrai problème. Le fichier dbml et les fichiers de configuration contiendraient toujours une chaîne de connexion incorrecte, si elle n'est pas utilisée, ce qui, au mieux, pourrait dérouter les autres développeurs.