2010-11-30 15 views
0

J'ai une situation où certains clients voient le serveur par son adresse IP locale et d'autres par le global. Alors que pour certains d'entre eux IP est 10.0.0.4 et pour certains 94.44.224.132. J'utilise ClickOnce pour le déploiement et Entity Framework pour générer le mappage de base de données. Maintenant ive réglage de la chaîne de connexion dans ma section des paramètres de l'utilisateur et pour chaque utilisateur je stocke le sien. Après que pour la construction de contexte de l'entité que je fais ce qui suit:Comment avoir des chaînes de connexion de cadre d'entité unique dans chaque fichier de configuration utilisateur

SomeEntities context = new SomeEntities(new EntityConnection("metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=\"" + Properties.Settings.Default.ServerLocalConnectionString + "\"")); 

Mais il y a quelques problèmes avec l'exécution d'ouverture/fermeture et commande après une telle approche. Existe-t-il une bonne façon de stocker des chaînes de connexion individuelles pour chaque client et de ne pas les écraser avec le déploiement (ClickOnce est préférable)?

Répondre

0

Réponse trouvée here.

EntityConnectionStringBuilder ecb = new EntityConnectionStringBuilder(); 
    if (serverName=="Local") 
    { 
     ecb.ProviderConnectionString = Properties.Settings.Default.ServerLocalConnectionString; 
    } 
    else 
    { 
     ecb.ProviderConnectionString = Properties.Settings.Default.ServerConnectionString; 
    } 

    ecb.Metadata = "res://*/"; 
    ecb.Provider = "System.Data.SqlClient"; 
    SomeEntities context = new SomeEntities(new EntityConnection(ecb.ToString()); 

Cela semble fonctionner. Et maintenant je peux déployer l'application et laisser à l'utilisateur la décision à quel serveur veut-il se connecter et laisser cette configuration après des mises à jour, parce que son app.config écrit dans l'utilisateur.