2009-12-27 7 views
0

J'ai posé cette question What is the best way to dynamic load connection stringsLes meilleures pratiques pour ma solution

Mais peut-être il est préférable de poser la question un peu différent.

J'ai une solution CRM où j'ai différentes bases de données SQL pour chaque entreprise, mais je voudrais essayer de n'avoir qu'un seul site IIS, puisque le site est toujours égal à l'exception de SqlConnectionString dans le fichier Web.config. J'utilise LinqToSql et génère les classes automatiquement en utilisant les outils de VS2008. Cela signifie que j'ai les DataClasses qui sont générées automatiquement. Je trouve que cette classe lit la chaîne de connexion du web.config dans cette ligne:

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

Les utilisateurs tous les journaux dans le même site IIS Wich je veux auhenticate contre AD puis les rediriger vers le site CRM, Quand je le fais, je voudrais dynamiquement obtenir le bon ConnectionString et faire en sorte que la classe Linq l'utilise.

Suis-je sur la bonne voie pour que cela se produise? Et si oui, comment puis-je atteindre pour charger la dynamique de la chaîne de connexion pour les classes linq, le fichier dont le code ci-dessus est trouvé est autogénéré et est supprimé chaque fois que je compile.

Des idées?

Répondre

2

Vous pouvez le faire si linqmetal desinger cliquez dessus puis dans la fenêtre de propriété sur la connexion SQL vous sélectionnez vide donc l'autogénération ne vous owerwrite code. Ensuite, vous créez la classe partielle pour vous datacontex puis vous créez ce contructor par votre auto exemple:

public partial class DataClassesDataContext 
    { 
     public DataClassesDataContext() 
      : base(StaticMethodThatYouDoLogicForConnStringDecision(), mappingSource) 
     { 

     } 
    } 
+0

merci. Cela fonctionne. Savez-vous comment je peux lire à partir d'une variable de session où vous mettez le StaticMethodThatYouDoLogicForConnStringDecision? – espenk

+0

Nevermind. je l'ai – espenk

1

Avec les deux entités ADO et Linq-toSQL la classe datacontext (générée) a une surcharge qui accepte un ConnectionString.

Vous devrez ajouter quelques étapes chaque fois que vous créez le contexte:

string myConnectName = Lookup[Session.ConnectName]; // or something 

var rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
var connString = rootWebConfig.ConnectionStrings.ConnectionStrings[myConnectName]; 

var context = new MyDataContext(connString.ConnectionString); 
Questions connexes