¿Por qué una conexión de Entity Framework requiere una propiedad de metadatos?

connection connection-string data-access-layer database entity-framework

Pregunta

Cambié mi DAL de usar LINQ a Entity Framework. Debido a que mi aplicación se conecta a diferentes bases de datos dependiendo del usuario actual, necesito crear dinámicamente el DataContext en tiempo de ejecución y pasar la cadena de conexión apropiada. Sin embargo, cuando intenté crear mediante programación una conexión de Entity Framework utilizando mi cadena de conexión anterior, la conexión falló. Se quejó de que no reconoció la clave en la cadena de conexión, "servidor" para ser exacto.

Descubrí que necesitaba hacer esto para que la conexión de Entity Framework funcione:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

¿Por qué es esto?
¿Para qué es la propiedad Metadata?
¿Será un problema que siempre sea el mismo para múltiples conexiones diferentes?
¿Que debería ser?
¿Hay alguna manera de evitar esto?

¡Gracias por adelantado!

Actualización 1: Gracias por la actualización Randolpho, pero ...
El motivo principal por el que tengo este problema es que no puedo almacenar las cadenas de conexión en un archivo de configuración. La cadena de conexión se determina dinámicamente en el tiempo de ejecución por el cual el usuario se está conectando.

Aquí está mi escenario exacto:
Si el usuario A se conecta, la aplicación obtiene datos de la base de datos A. Si el usuario B se conecta, la aplicación obtiene datos de la base de datos B.
Las cadenas de conexión se almacenan en una base de datos principal, y el número es potencialmente ilimitado. Cada vez que agrego un usuario, no quiero tener que entrar en el web.config, ¡sin mencionar el hecho de que eventualmente se volverá ENORME!

Respuesta aceptada

Usted encontrará estos enlaces muy informativos:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

¿Línea de fondo? Entity Framework necesita los metadatos para construir sus asignaciones de entidades.

Además, debe considerar mover su información de conexión a su archivo de configuración en lugar de compilarlo en código. El primer enlace te mostrará cómo hacerlo.


Respuesta popular

Ampliando la respuesta de Randolpho:

La propiedad de metadatos apunta específicamente a la ubicación de los archivos .SSDL (Modelo de almacenamiento,) .CSDL (Modelo conceptual,) y .MSL (Modelo de mapeo). Estos tres archivos son esencialmente el modelo de datos de la entidad. El calificador de estilo URI "res: //" indica que los archivos están incrustados como recursos en el ensamblado EDM compilado.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué