2009-08-10 6 views
22

Tout d'abord, permettez-moi de dire que je suis très nouveau à EF. Cela dit, voici mon dilemme:Entity Framework à plusieurs bases de données (même schéma) à l'exécution?

Il y aura une application ASP.NET migrée vers ASP.NET MVC. Je voudrais utiliser EF pour cela. Il y a une base de données principale qui stocke "l'information du client". En dehors de cela, chaque "client" a sa propre base de données. Ce sont les contraintes que nous avons.

Actuellement, les informations sur le client dans le DB principal me permettent de créer une chaîne de connexion par client et de faire des appels SQL individuels.

Comment pourrais-je accomplir la même chose dans Entity Framework? Chaque base de données aura le même schéma. Est-il un moyen de basculer par programmation la chaîne de connexion? Ces DB sont actuellement sur le même serveur, mais ce n'est pas une exigence et il peut s'agir d'un serveur complètement différent.

Des idées?

Plusieurs chaînes de connexion dans Web.config seraient un dernier recours. Même alors, je ne sais pas exactement comment câbler ça.

Merci d'avance.

Répondre

5

Lorsque vous construisez un contexte de données, voici comment modifier par programme la chaîne de connexion lors de l'exécution en modifiant la Context.Connection propriété:

//Get the connection string from app.config and assign it to sqlconnection string builder 
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(((EntityConnection)context.Connection).StoreConnection.ConnectionString); 
sb.IntegratedSecurity = false; 
sb.UserID ="User1"; 
sb.Password = "Password1"; 

//set the object context connection string back from string builder. This will assign modified connection string. 
((EntityConnection)context.Connection).StoreConnection.ConnectionString = sb.ConnectionString; 

Extrait de: http://sivapinnaka.spaces.live.com/blog/cns!B027EF7E7070AD69!211.entry

8

Si vous travaillez dans une EntityConnection dans le constructeur de votre objet entités, vous pouvez changer la base de données assez facilement.

EntityConnection con = new EntityConnection(connString); 
con.ChangeDatabase(dbName); 
using (Entities context = new Entities(con)) 
{ 
    // Some code here 
} 
2

Si le nombre de vos clients est limité et les chaînes de connexion changent presque jamais, d'une manière élégante peut-être utiliser ConfigurationManager.ConnectionStrings pour récupérer la chaîne de connexion nécessaire.

Comme

string connectionString = ConfigurationManager.ConnectionStrings["Miller"].ConnectionString; 
return new Entities(connectionString); 

Voir aussi http://msdn.microsoft.com/en-us/library/ms254494.aspx

Questions connexes