De repente sigo obteniendo MetadataException
instancias de mi ObjectContext
clase generada . La cadena de conexión en App.Config parece correcta, no ha cambiado desde la última vez que funcionó, y he intentado regenerar un nuevo modelo (archivo edmx) desde la base de datos subyacente sin ningún cambio.
¿Alguien tiene alguna idea?
Más detalles: no he cambiado ninguna propiedad, no he cambiado el nombre de ningún ensamblado de salida, no he intentado incrustar el EDMX en el ensamblado. Simplemente he esperado 10 horas desde que salí del trabajo hasta que regresé. Y luego ya no funcionaba.
He intentado recrear el EDMX. He intentado recrear el proyecto. Incluso he intentado recrear la base de datos, desde cero. Sin suerte, en absoluto.
c#
.net
entity-framework
ado.net
J. Steen
fuente
fuente
Respuestas:
Esto significa que la aplicación no puede cargar el EDMX. Hay varias cosas que pueden causar esto.
En resumen, no hay realmente suficientes detalles en su pregunta para dar una respuesta precisa, pero es de esperar que estas ideas lo lleven por el camino correcto.
Actualización: he escrito una publicación de blog con pasos más completos para la resolución de problemas .
fuente
Este pequeño cambio ayuda con este problema.
Tengo una solución con 3 proyectos.
cambiar a
fuente
Puede obtener esta excepción cuando Edmx está en un proyecto y lo está utilizando desde otro.
La razón es
Res://*/
una uri que apunta a recursos en la asamblea ACTUAL. Si el Edm se define en un ensamblado diferente del código que lo está utilizando, res: // * / no funcionará porque no se puede encontrar el recurso.En lugar de especificar '*', debe proporcionar el nombre completo del ensamblado (incluido el token de clave pública). P.ej:
Una mejor manera de construir cadenas de conexión es con EntityConnectionStringBuilder:
Si aún encuentra la excepción, abra el ensamblaje en reflector y verifique los nombres de archivo para sus archivos .csdl, .ssdl y .msl. Cuando los recursos tienen nombres diferentes a los especificados en el valor de metadatos, no funcionará.
fuente
res://MyAssembly/folder.<filename>.csdl...
Tuve un error similar Había recreado el proyecto (larga historia) y saqué todo del antiguo proyecto. No me había dado cuenta de que mi modelo había estado en un directorio llamado 'Modelo' antes, y ahora estaba en un directorio llamado 'Modelos'. Una vez que cambié la conexión en mi Web, configúrelo desde esto:
a esto:
Todo funcionó (cambiado
Model
aModels
). Tenga en cuenta que tuve que cambiar estos tres lugares en esta cadena.fuente
Y una forma rápida de verificar el nombre del modelo sin Reflector ... busque el directorio
y verifique que los archivos de recursos .csdl, .msl y .ssdl estén allí. Si están en un subdirectorio, el nombre del subdirectorio debe anteponerse al nombre del modelo.
Por ejemplo, mis tres archivos de recursos están en un subdirectorio Datos , por lo que mi cadena de conexión tenía que estar
(versus metadatos = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
fuente
También tuve este problema y fue porque la cadena de conexión en mi web.config era ligeramente diferente a la de app.config del ensamblaje donde se encuentra mi EDMX. No tengo idea de por qué cambió, pero aquí están las dos versiones diferentes.
App.config:
Web.config:
Lo que solucionó fue simplemente copiar la cadena app.config (observe la pequeña diferencia al final, en lugar de "
App=EntityFramework
" quería "application name=EntityFramework
") en web.config y el problema se resolvió. :)fuente
The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
cadenas de conexión de Entity Framework no comparten esa flexibilidad, por lo que debe usar solo las palabras clave que espera.Esto me sucedió cuando cambié accidentalmente la Acción de compilación del archivo edmx (aparece en Propiedades en el IDE) de 'EntityDeploy' a 'Ninguno'. EntityDeploy es lo que llena los metadatos para usted: consulte http://msdn.microsoft.com/en-us/library/cc982037.aspx
fuente
Esto me sucede cuando no limpio la solución antes de compilar un nuevo diseñador .edmx. Así que no olvides limpiar la solución antes de construir un nuevo diseñador .edmx. Esto me ayuda a omitir muchos más problemas con este. Debajo de los detalles de navegación proporcionados en caso de que sea nuevo en Visual Studio.
Espero que esto ayude. Gracias a todos
fuente
Acabo de pasar unos felices 30 minutos con esto. Cambié el nombre del objeto de entidades, cambié el nombre de la entrada en el archivo de configuración, pero hay más ... también tiene que cambiar la referencia al csdl
muy fácil de perder: si está cambiando el nombre, asegúrese de obtener todo ...
fuente
Yo tuve el mismo problema. Miré en mi dll cumplido con reflector y he visto que el nombre del recurso no era correcto. Cambié el nombre y ahora se ve bien.
fuente
Para mi caso, se resuelve cambiando las propiedades del archivo edmx.
Esto resolvió mi problema. El problema es que cuando el contenedor intenta encontrar los metadatos, no puede encontrarlos. así que simplemente hazlo en el mismo ensamblaje. esta solución no funcionará si tiene sus archivos edmx en otro ensamblado
fuente
Pasé un día entero en este error
si estás trabajando con
n-tear architecture
o intentaste
separate Models
generar elEDMX
formulario DataAccessLayer paraDomainModelLayer
tal vez obtendrás este error
webconfig (UILayer)
yappconfig (DataAccessLayer)
sea la mismaSegundo que es muy importante el
connection string
cuál es el problema
de donde en la tierra obtuve
Model
o lo que sea .csdl en mi cadena de conexión donde estánAquí mi solución mira la imagen
espero la ayuda
fuente
Pude resolver esto en Visual Studio 2010, VB.net (ASP.NET) 4.0.
Durante el asistente del modelo de entidad, podrá ver la cadena de conexión de la entidad. Desde allí puede copiar y pegar en su cadena de conexión.
Lo único que me faltaba era el "App_Code". en la cadena de conexiones.
fuente
Después de horas de buscar en Google e intentar resolver, ninguna de las soluciones sugeridas funcionó. He enumerado varias soluciones aquí. También he notado el que funcionó para mí. (Estaba usando EF versión 6.1.1 y SQL Server 2014, pero una base de datos anterior)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(estos son archivos. Para verlos, puede alternar Mostrar todos los archivos en el explorador de soluciones, en el directorio ~ / obj / ..)... y muchos más que había probado [como: revertir la versión EntityFramework a una versión posterior (no estoy seguro)]
lo que funcionó para mí:
de este artículo aquí , me ayudó a resolver mi problema. Acabo de cambiar mi
ProviderManifestToken="2012"
aProviderManifestToken="2008"
en el archivo EDMX. Para hacer esto:Explorador de la solución
Espero que eso ayude.
fuente
Si está utilizando el edmx de un proyecto diferente, entonces en la cadena de conexión, cambie ...
...a...
fuente
folder.subfolder
anterior.La solución definitiva (incluso después de recrear la base de datos en otras dos máquinas, así como el EDMX y otros artículos diversos) fue no usar la primera edición de Entity Framework. Estamos ansiosos por evaluarlo nuevamente en .NET 4.0.Después de encontrarme nuevamente con el mismo problema y buscar una respuesta, finalmente encontré a alguien que había tenido el mismo problema. Parece que la cadena de conexión no fue generada correctamente por el asistente de Visual Studio, y el enlace a los recursos de metadatos no tenía una ruta importante.
v1.0 ¿ERROR ?: No se puede cargar el recurso de metadatos especificado. Scripts! = Modelos
Actualización 2013-01-16 : Después de haber pasado a utilizar casi exclusivamente las prácticas de EF Code First (incluso con bases de datos existentes), este problema ya no es un problema. Para mí, esa fue una solución viable para reducir el desorden del código y la configuración autogenerados y aumentar mi propio control sobre el producto.
fuente
Mi problema y solución, los síntomas eran los mismos "No se puede cargar el recurso de metadatos especificado" pero la causa raíz era diferente. Tenía 2 proyectos en solución, uno era EntityModel y el otro la solución. De hecho, eliminé y recreé el archivo EDMX en EntityModel.
La solución fue que tuve que volver al proyecto de aplicación web y agregar esta línea al archivo de configuración. El nuevo modelo había cambiado algunos elementos que debían duplicarse en el archivo Web.Config del "otro" proyecto. La configuración anterior ya no era buena.
fuente
A veces veo este error en mi proyecto. Lo resuelvo por
1 - Haga clic derecho en el archivo EDMX
2 - Seleccionar
Run Custom Tool
opción3 - Reconstruir proyecto
fuente
En mi caso, este problema estaba relacionado con el cambio de nombre del archivo edmx de mi modelo ... la corrección de la cadena de conexión app.config para los archivos csdl / ssdl / msl solucionó mi problema.
Si está utilizando el diseñador EF 4.0 para generar su csdl / ssdl / msl, estos 3 "archivos" se almacenarán en el archivo edmx principal del modelo. En este caso, la publicación de Waqas está más o menos marcada. Es importante comprender que "Model_Name" en su ejemplo deberá cambiarse a cualquier nombre actual del archivo .edmx de su modelo (sin el .edmx).
Además, si su archivo edmx no está en el nivel raíz de su proyecto, debe anteponer Model_Name con la ruta relativa, p. Ej.
especificaría que csdl / ssdl / msl xml se almacena en el archivo de modelo 'WidgetModel.edmx' que se almacena en una carpeta llamada 'MyModel'.
fuente
He escrito esta clase auxiliar para crear instancias de objetos ObjectContext cuando se definen en un proyecto diferente al proyecto que lo usa. Analizo la cadena de conexión en el archivo de configuración y reemplazo '*' por el nombre completo del ensamblado.
No es perfecto porque usa la reflexión para construir el objeto, pero es la forma más genérica de hacerlo que pude encontrar.
Espero que ayude a alguien.
fuente
Para todos ustedes
SelftrackingEntities
usuarios, si han seguido el tutorial de Microsoft y han separado la clase de contexto Object en el proyecto de servicio wcf (al vincularlo al contexto .tt), esta respuesta es para ustedes:parte de las respuestas mostradas en esta publicación que incluye código como:
¡NO FUNCIONARÁ PARA TI! la razón es que
YourObjectContextType.Assembly
ahora reside en un Assembley diferente (dentro del ensamblaje del proyecto wcf),Entonces debes reemplazar
YourObjectContextType.Assembly.FullName
con ->que te diviertas.
fuente
Estaba teniendo problemas con este mismo mensaje de error. Mi problema se resolvió cerrando y volviendo a abrir Visual Studio 2010.
fuente
Tuve el mismo problema porque cambié el nombre de una asamblea.
También tuve que cambiarle el nombre en los atributos AssemblyTitle y AssemblyProduct en el proyecto Properties / AssemblyInfo.cs, y también eliminar y volver a agregar la referencia al archivo edmx.
Entonces funcionó bien.
fuente
Al tener el mismo problema, recreé edmx desde la base de datos. Resuelve mi problema
fuente
La excepción se debe a que el compilador apunta a Metadatos no existentes, así que simplemente copie la cadena de
app.config
conexión aWeb.config
ConnectionStringfuente
También tuve el mismo problema y solución que Rick, excepto que estaba importando un .edmx existente a un nuevo proyecto, y aunque el espacio de nombres base no importaba, se importó a un subdirectorio diferente, así que también tuve que actualizar la conexión cadena dentro de Web.Config en tres lugares, para incluir los diferentes nombres de subdirectorios:
fuente
Tuve el mismo problema con una solución que contenía proyectos en una carpeta de soluciones, cuando se trasladaron a la raíz de la solución (para superar un posible error con el convertidor Mvc3AppConverter debido a las ubicaciones del proyecto).
Aunque la solución compilada después de que todas las referencias del proyecto * se volvieran a agregar según fuera necesario, el error se produjo cuando se inició el sitio web.
El EDMX está en uno de los proyectos que se movió (el proyecto 'Datos'), pero, por supuesto, la falta de una referencia al proyecto de Datos no causó un error de compilación, solo un error en tiempo de ejecución.
Simplemente agregar la referencia faltante al proyecto principal resolvió este problema, no es necesario editar la conexión.
Espero que esto ayude a alguien más.
fuente
En cuanto a mí, había separado la capa de acceso a datos y la capa de interfaz de usuario. Entonces tengo una cadena de conexión de entidad para cada capa.
Antes de modificar estas dos cadenas de conexión separadas para que sean iguales, todavía encontré ese error a continuación.
Así que creo que son las mismas cadenas de conexión para esas dos capas (DAL, UI), funcionan perfectamente.
Mi solución es hacer que todas las cadenas de conexión sean iguales sin importar dónde ya se hayan presentado .
fuente
Ayer tuve este problema y estaba mirando mi código en depuración y la salida de SQL Profiler.
Lo que no podía entender, antes de leer y comprender esta publicación, era por qué EntityFramework estaba lanzando este error cuando llamaba a la base de datos. Estaba mirando a través de cientos de líneas en SQL Profiler tratando de resolver qué estaba mal con el modelo de base de datos. No pude encontrar nada como la llamada que esperaba, y para ser honesto, no estaba seguro de lo que estaba buscando.
Si está en esta posición, verifique la cadena de conexión. Supongo que antes de que EntityFramework cree su SQL, verificará el modelo, especificado en la parte de metadatos de la cadena de conexión. En mi caso estuvo mal. EntityFramework ni siquiera llegó tan lejos como el DB.
Asegúrese de que los nombres sean correctos. Una vez que lo resolví, estaba viendo llamadas en SQL Profiler donde el ApplicationName era 'EntityFramework' con SQL llamando a las tablas esperadas.
fuente
Un archivo app.config o web.config deficiente puede hacer esto ... Copié la cadena de conexión app.config a mi web.config en mi interfaz de usuario y terminé ingresando:
fuente