2012-05-09 13 views

Respuesta

4

Cambie la cadena de conexión en el archivo web.config.

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

que abrevia la cadena de conexión real, ya que no es importante - sólo quería darle una idea de lo que debe buscar en el archivo web.config.

También puede cambiar las cadenas de conexión de forma programática. Consulte Example 16.2. Programmatically modifying an EntityConnectionString.

+0

sé cómo configurar cadena de conexión en web.config, lo que quiero saber es cómo cambiar en tiempo de ejecución, esto es así, entonces puedo elegir qué base de datos usar. La cadena de conexión ya se ha configurado cuando creo el archivo edmx, ¿hay alguna manera de cambiarlo en tiempo de ejecución? – James

+0

OK - Edité mi respuesta y le di un enlace que le muestra exactamente cómo hacerlo. –

+0

Esta pregunta y respuestas lo ponen todo en una conveniente frase: http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string. –

22

No almacenamos cadenas de conexión en nuestra web.configs, por lo que la solución aceptada no nos funcionaría. Si simplemente intento de proporcionar la cadena de conexión a través de la base DbContext constructor, que obtendrá la siguiente excepción:

código generado usando las plantillas T4 para la primera base de datos y el desarrollo del primer modelo puede no funcionar correctamente si se utiliza en Código Primer modo. Para continuar utilizando Database First o Model First, asegúrese de que la cadena de conexión de Entity Framework esté especificada en el archivo de configuración de la aplicación en ejecución. Para utilizar estas clases, que se generaron desde Database First o Model First, con Code First agrega cualquier configuración adicional utilizando atributos o la API de DbModelBuilder y luego elimina el código que arroja esta excepción.

Para resolver esto, cree una clase parcial de su contexto de la siguiente manera y dar formato a la cadena de conexión con los metadatos adicionales EF (donde MyContext es su contexto nombre del modelo (por ejemplo, el nombre del modelo es MyModel.edmx, que la MyContext en código de abajo se sustituye con MyModel con las tres extensiones .csdl, .ssdl, .msl utilizado)):

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

Para que esto funcione para mí, tuve que cambiar el " a una sola cotización como se describe en esta respuesta: http://stackoverflow.com/a/7004173/994464 – Brenton

+0

Directo y simple. –

1

puede definir cadena de conexión múltiple en web.config y luego utilizarlos en su código quizá tu trabajo. por ejemplo: `

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

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

y así sucesivamente

y su constructor de clase de contexto de obtener la conexión nombre de la cadena como parámetro:

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

Ok. ahora se puede utilizar en el código de la siguiente manera:

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

y luego

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