2009-08-10 8 views
22

Prima di tutto, vorrei dire che sono molto nuovo per EF. Detto questo, ecco il mio dilemma:Entity Framework su più database (stesso schema) in fase di esecuzione?

Ci sarà un'app ASP.NET migrata su ASP.NET MVC. Mi piacerebbe utilizzare EF per questo. C'è un database principale che memorizza "informazioni sul cliente". A parte questo, ogni "cliente" ha il proprio database. Questi sono i vincoli che abbiamo.

Attualmente, informazioni sul client nel DB principale che mi consente di creare una stringa di connessione per client e di effettuare singole chiamate SQL.

Come potrei realizzare la stessa cosa in Entity Framework? Ogni database avrà lo stesso schema. C'è un modo per cambiare la stringa di connessione a livello di programmazione? Questi DB sono attualmente sullo stesso server, ma non è un requisito e potrebbe essere un server completamente diverso.

Qualche idea?

Più stringhe di connessione in Web.config rappresenterebbero l'ultima risorsa. Anche allora, non sono sicuro di come collegare esattamente questo.

Grazie in anticipo.

risposta

5

Quando si crea un contesto dati, ecco come modificare a livello di stringa di connessione in fase di esecuzione modificando il Context.Connection proprietà:

//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; 

Tratto da: http://sivapinnaka.spaces.live.com/blog/cns!B027EF7E7070AD69!211.entry

8

Se si lavora attraverso una EntityConnection nel costruttore del tuo oggetto entità, puoi cambiare abbastanza facilmente il database.

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

Se il numero dei vostri clienti è limitato e le stringhe di connessione quasi mai cambiare, un modo elegante potrebbe essere quella di utilizzare ConfigurationManager.ConnectionStrings retreive la stringa di connessione necessaria.

Come

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

Vedi anche http://msdn.microsoft.com/en-us/library/ms254494.aspx

Problemi correlati