2010-01-29 24 views
7

Tengo un proyecto web con un modelo de datos definido en un archivo edmx. La cadena de conexión comienza así:Cómo especificar la ubicación de los metadatos en la cadena de conexión cuando se utiliza un archivo de edmx

metadata = res: // * /;

Esto funcionó bien por un tiempo. Pero alguien más que trabajaba en el proyecto creó un dll que también usa el marco de entidades y lo agregó a la carpeta bin. Ahora cuando trato de crear mi conexión, hay un error al cargar los metadatos.

Además de cambiar por completo la forma en que uno o ambos hacemos las cosas, me pregunto si el problema puede solucionarse si mi cadena de conexión puede cambiarse para buscar solo los metadatos definidos en mi archivo edmx. El problema es que, por mi vida, no puedo encontrar la sintaxis correcta para hacer esto. Los metadatos están incrustados en el ensamblaje de salida, por lo que no hay archivos de metadatos físicos para señalar. ¿Cómo exactamente debo especificar la ubicación de los metadatos en la cadena de conexión?

Respuesta

7

Sí, he visto este problema antes. Y era solo cuestión de tiempo antes de que alguien hiciera esta pregunta.

Básicamente res://*/ cargas de todos los metadatos de todos los conjuntos, así que si hay más de un conjunto de metadatos EF se confunde.

Por lo tanto, usar res://*/ de manera predeterminada como lo hace EF en WebApplications es un error, desafortunadamente es uno que no tuvimos tiempo de resolver.

La solución es ser más específicos con la cadena de conexión o menos así: res: // /App_Code.Northwind.csdl|res:// /App_Code.Northwind.ssdl|res://*/ App_Code.Northwind.msl;

Donde App_Code es la carpeta App_Code (asumiendo que es donde está su modelo en su proyecto web), y Northwind es el nombre de su EDMX. Si tiene problemas para usar los nombres, mire los nombres de los recursos en su ensamblaje usando algo como Reflector.

Hacer esto le dice al EF exactamente qué CSDL, SSDL y MSL cargar de los ensamblados cargados y debería resolver su problema.

Esperanza esto ayuda

Alex

+0

Muchas gracias por su respuesta, Alex. Los caminos de recursos que sugieres tienen sentido, y me sorprende que en todos mis tropiezos esta tarde no haya intentado eso. Funcionó, en cualquier caso. Una pregunta más. Si no hubiera funcionado, no sabría dónde encontrar el ensamblado App_Code para verlo con Reflector. ¿Dónde sería eso? Esto es algo más que creo que debería saber, o debería poder encontrar fácilmente en línea, pero mi foo de Google ha sido horrible hoy. –

+0

¿Miraste en tu directorio bin? –

+0

He buscado allí, pero no hay nada más que dlls que se hayan agregado explícitamente al proyecto. Debo estar perdiendo algo. ¿Necesito precompilar el sitio? –

Cuestiones relacionadas