2009-08-10 23 views
22

Antes que nada, permítanme decir que soy muy nuevo en EF. Dicho esto, aquí está mi dilema:Entity Framework a múltiples bases de datos (mismo esquema) en tiempo de ejecución?

Habrá una aplicación ASP.NET migrada a ASP.NET MVC. Me gustaría utilizar EF para esto. Hay una base de datos principal que almacena "información del cliente". Aparte de eso, cada "cliente" tiene su propia base de datos. Estas son las limitaciones que tenemos.

Actualmente, la información del cliente en la base de datos principal que me permite construir una cadena de conexión por cliente y hacer llamadas SQL individuales.

¿Cómo puedo lograr lo mismo en Entity Framework? Cada base de datos TENDRÁ el mismo esquema. ¿Hay alguna manera de cambiar programáticamente la Cadena de conexión? Estos DB están actualmente en el mismo servidor, pero eso no es un requisito y puede ser un servidor completamente diferente.

¿Alguna idea?

Las cadenas de conexión múltiples en Web.config serían un último recurso. Incluso entonces, no estoy seguro de cómo exactamente conectar esto.

Gracias de antemano.

Respuesta

5

Cuando se construye un contexto de datos, aquí es cómo cambiar la cadena de conexión en tiempo de ejecución mediante la modificación del Context.Connection propiedad:

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

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

8

Si se trabaja a través una EntityConnection en el constructor del objeto de su entidad, puede cambiar la base de datos con bastante facilidad.

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

Si el número de sus clientes es limitado y las cadenas de conexión casi nunca cambia, una manera elegante podría ser utilizar ConfigurationManager.ConnectionStrings es posible recuperar la cadena de conexión necesaria.

Como

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

Ver también http://msdn.microsoft.com/en-us/library/ms254494.aspx

Cuestiones relacionadas