Me gustaría proporcionar la cadena de conexión para mi base de datos en tiempo de ejecución. Estoy usando el Entity Framework. Esto es lo que tengo hasta ahoracadena de conexión en tiempo de ejecución de Entity Framework
class MyClassDBContext:DbContext
{
public MyClassDBContext(string str) : base(str)
{
this.Database.Connection.ConnectionString = str;
}
}
Para usar el código anterior, traté
//create connection string
EntityConnectionStringBuilder myConn = new EntityConnectionStringBuilder();
myConn.Provider = "System.Data.SqlClient";
myConn.ProviderConnectionString = "user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30";
//inject the connection string at runtime
MyClassDBContext a = new MyClassDBContext(myConn.ToString())
El código anterior me dio un error diciendo "palabra clave proveedor no compatible". para tratar de depurar este error, he intentado lo siguiente
MyClassDBContext a = new MyClassDBContext("metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
Ahora, tengo un error que dice "keyword no compatible". Así que cambié mi código para
MyClassDBContext a = new MyClassDBContext("provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
Ahora tengo un error que dice "palabra clave proveedor no compatible". Así que de nuevo cambié mi código a
MyClassDBContext a = new MyClassDBContext("user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
y ahora funciona !. Mi pregunta es: ¿cómo especifico el proveedor y los metadatos en el tiempo de ejecución? Parece que solo se acepta la cadena de conexión. Estoy usando la Entidad 4.3.1 de Nuget.
Gracias
Entonces, ¿qué haría si tuviera que conectarme a Oracle o MySQL usando el código primero? –
La cadena de conexión EF tiene 'Provider =" System.Data.Entity "' y 'ConnectionString =" res: //big.csdl | res: //ball.ssdl | res: //mud.msl; provider connection string = " ... "'. Las cadenas de conexión normales tienen 'Provider =" System.Data.Client "' (u Oracle o MySql) y 'ConnectionString =" detalles para conectarse a él ''. Estos dos parámetros suelen estar en un app.config o web.config, pero usted elige crearlos de forma dinámica. En EF Code First, tomas el segundo camino. En EDMX land, debe incrustar los detalles de la segunda ruta en la "Ruta de conexión del proveedor" de la primera ruta. Es feo – robrich