2012-05-09 12 views

risposta

4

Modificare la stringa di connessione nel file web.config.

<connectionStrings> 
    <add name="SandBoxEntities" connectionString="metadata=r... /> 
    </connectionStrings> 

ho abbreviato la stringa di connessione reale perché non è importante - solo voluto dare un'idea di cosa cercare nel file web.config.

È inoltre possibile modificare le stringhe di connessione in modo programmatico. Controlla Example 16.2. Programmatically modifying an EntityConnectionString.

+0

so come impostare stringa di connessione nel web.config, quello che voglio sapere è come cambiarlo in fase di esecuzione, questo è, quindi posso scegliere quale database utilizzare. La stringa di connessione è già impostata quando creo il file edmx, c'è un modo per cambiarlo in fase di runtime? – James

+0

OK - Ho modificato la mia risposta e ti ho dato un link che ti mostra esattamente come farlo. –

+0

Questa domanda e le risposte mettono il tutto in una comoda nota: http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string. –

22

Non memorizziamo stringhe di connessione nel nostro web.configs, quindi la soluzione accettata non funzionerebbe per noi. Se semplicemente tenta di fornire la stringa di connessione tramite la DbContext costruttore di base, si otterrà la seguente eccezione:

codice generato utilizzando i modelli T4 per database In primo modello Prima di sviluppo potrebbe non funzionare correttamente se utilizzato in codice Prima modalità Per continuare a utilizzare Database First o Model First assicurarsi che la stringa di connessione di Entity Framework sia specificata nel file di configurazione dell'applicazione in esecuzione. Per utilizzare queste classi, che sono state generate da Database First o Model First, con Code First aggiungere qualsiasi configurazione aggiuntiva utilizzando gli attributi o l'API DbModelBuilder e quindi rimuovere il codice che genera questa eccezione.

Per risolvere questo, creare una classe parziale del contesto come segue e formattare la stringa di connessione con i metadati EF aggiuntivo (dove myContext è la vostra contesto nome del modello (ad esempio, il nome del modello è MyModel.edmx, che il MyContext in codice di seguito viene sostituito con MyModel con tutte e tre le estensioni .csdl, .ssdl, .msl utilizzato)):

public partial class MyContext 
{ 
    public MyContext(string connStr) 
     : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr)) 
    { 
    } 
} 
+1

per fare questo lavoro per me, avevo bisogno di cambiare il " ad un apice singolo come descritto in questa risposta: http://stackoverflow.com/a/7004173/994464 – Brenton

+0

diretta e semplice. –

1

È possibile definire stringa di connessione multipla in web.config e poi usarli nel codice forse il tuo lavoro. per esempio: `

<connectionStrings> 
    <add name="conStr1" connectionString="metadata=r... /> 
</connectionStrings>` 

<connectionStrings> 
    <add name="conStr2" connectionString="metadata=r... /> 
</connectionStrings>` 

e così via

e il vostro costruttore di classe contesto ottenere la connessione nome stringa come parametro:

public MyContext(string connStr) 
    : base(connStr) { } 

Ok. ora è possibile utilizzare nel codice, come di seguito:

using (var db = new MyContext("name=conStr1")) 
{ 
    //your code here 
} 

e poi

using (var db = new MyContext("name=conStr2")) 
{ 
    //your code here 
}