MetadataException: no se puede cargar el recurso de metadatos especificado

681

De repente sigo obteniendo MetadataExceptioninstancias de mi ObjectContextclase 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.

J. Steen
fuente
14
Si una pregunta SO sobre un producto específico que tiene más de 200k vistas, entonces el producto no funciona de la manera que los usuarios esperan. Me gustaría ver a Microsoft abordar esto. Aquí hay un enlace para darles sugerencias si tiene tiempo: visualstudio.uservoice.com/forums/121579-visual-studio .
Tony L.
Mi problema se resolvió reemplazando la cadena de conexión copiada del proyecto db-layer.
Hardik

Respuestas:

856

Esto significa que la aplicación no puede cargar el EDMX. Hay varias cosas que pueden causar esto.

  • Es posible que haya cambiado la propiedad MetadataArtifactProcessing del modelo a Copiar al directorio de salida.
  • La cadena de conexión podría estar equivocada. Sé que dice que no lo ha cambiado, pero si ha cambiado otras cosas (por ejemplo, el nombre de un ensamblaje), aún podría estar equivocado.
  • Es posible que esté utilizando una tarea posterior a la compilación para incrustar el EDMX en el ensamblado, que ya no funciona por algún motivo.

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 .

Craig Stuntz
fuente
70
La cadena de conexión, a pesar de mis esfuerzos por compararla con una utilidad de comparación de contenido la última vez, estaba equivocada.
J. Steen
16
Fue la cadena de conexión para mí también. Cuando tiene Pruebas de integración que también necesitan conexiones en su propia App.config, las cosas pueden no estar sincronizadas cuando actualiza su edmx.
Ray
11
OK, lo arreglé simplemente configurando "Incrustar"; compilando, luego reinicializándolo al otro. Eso resolvió mi problema.
Shimmy Weitzhandler
66
Tuve el mismo problema, probé su solución, quise darle +1, me di cuenta de que ya lo hice en el pasado. Ni siquiera recuerdo haber tenido este problema antes;). Esta vez, en mi caso, era la cadena de conexión correcta en la Biblioteca de clases con edmx e incorrecta en la aplicación web cuando se usaba.
Episodex
99
Impresionante guía. Para mí, copié otra cadena de conexión que usaba res: // * / Database.MyModel2 ..., cuando REALMENTE quería res: // * / MyModel1 ... (La base de datos es una carpeta dentro de mi proyecto de Pruebas de integración)
emragins
360

Este pequeño cambio ayuda con este problema.

Tengo una solución con 3 proyectos.

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

cambiar a

connectionString="metadata=res://*/;
MicTech
fuente
11
Me lo arregló, pero ¿qué diablos significa?
Lance Fisher
18
@Lance: explico esto en detalle en esta publicación de blog
Craig Stuntz el
44
@jocull: No, no funcionará en muchos casos, y será lento en otros. Lee la publicación de mi blog para entender por qué.
Craig Stuntz
66
Moví mi .edmx a la carpeta Modelo y olvidé actualizar la cadena de conexión. Gran puntero Gracias. Me hubiera tomado horas averiguarlo.
Asesinato
11
Usted, señor, ha salvado a un pobre empleado de Microsoft de un consumidor muy enojado.
The Muffin Man
115

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:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

Una mejor manera de construir cadenas de conexión es con EntityConnectionStringBuilder:

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

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á.

usuario276695
fuente
8
Tenga en cuenta que "YourEdmxFileName" debe ser el nombre calificado, por ejemplo, "YourNamespace.YourEdmxFileName", si utiliza espacios de nombres en su ensamblado. Sin embargo, debe eliminar la parte del espacio de nombres que equivale al nombre de su ensamblado.
Marcel
55
MSDN dice que el segundo párrafo está mal. "Cuando usa comodines (*), Entity Framework tiene que buscar en todos los ensamblados los recursos con el nombre correcto".
Craig Stuntz
Estoy bastante seguro de que el espacio de nombres no es relevante, pero la ruta del archivo incrustado sí lo es. Entonces, incluso si inspecciona el archivo * .Designer.cs del archivo edmx asociado y observa que el espacio de nombres de clase generado automáticamente es MyCompany ... lo que sea, no es lo que debe usar. En cambio, la ruta es el nombre del ensamblado, los nombres de las carpetas de solución / nombre del archivo. Por ejemplo: "metadata = res: // * / EntityModels. <Nombre de archivo> .csdl |" + "res: // * / EntityModels. <nombre de archivo> .ssdl |" + "res: // * / EntityModels. <nombre de archivo> .msl;"
Daniel
1
@Daniel, eso es en su mayoría correcto, pero tenga en cuenta que el espacio de nombres y la ruta del archivo incrustado a veces son los mismos. Tienes que mirar con Reflector (o una alternativa gratuita a eso) para estar seguro.
Craig Stuntz
parece que funciona usando solo el nombre del ensamblado, sin versión, publickeytoken, etc. Como:res://MyAssembly/folder.<filename>.csdl...
Ivan Ferrer Villa
67

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:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

a esto:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

Todo funcionó (cambiado Modela Models). Tenga en cuenta que tuve que cambiar estos tres lugares en esta cadena.

Rick Arthur
fuente
2
Moví mi modelo de Entity Framework de Modelo a DAL. Pero luego, cuando escribí una prueba (una semana después) en el proyecto de prueba para probar el generador de predicados Linq. Tengo este error Corregí los proyectos de prueba App.config con su aspecto en web.config del proyecto principal, como dijiste en tres lugares. Así que tu simple respuesta me puso en camino.
Patrik Lindström
Sí, gracias. Verifique su nombre de archivo. De alguna manera tenía el viejo nombre.
PeterX
77
¡¿Hay diferencia entre los dos?!
Erwin Rooijakkers
2
@ErwinRooijakkers Model vs ModelS
Marc
Me di cuenta de que había hecho lo mismo después de leer el blog de Craig, pero +1 para aprender es importante recordar que los cambios realizados en la biblioteca de clases de "entidades" no se realizan automáticamente en los archivos de configuración de los proyectos que hacen referencia a ella. / suspiro Me alegro de no estar solo.
ruffin
26

Y una forma rápida de verificar el nombre del modelo sin Reflector ... busque el directorio

... obj / {config output} / edmxResourcesToEmbed

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

metadatos = res: // * / Data .MyModel.csdl | res: // * / Data .MyModel.ssdl | res: // * / Data .MyModel.msl;

(versus metadatos = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).

leqid
fuente
Este fue EXACTAMENTE mi problema. Perdí varias horas en esto. Muchas gracias por esta explicación fácil
Fernando Carvalhosa
Gran respuesta, en realidad explica cómo encontrar cuál es tu cadena. Y muestra que las subcarpetas tienen '.' como delimitadores y no '\' o '/'.
cjb110
16

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:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

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ó. :)

Ghlouw
fuente
1
Gracias, este fue mi problema. Tuve 1 proyecto que accede a DB con EF y otro proyecto WCF. Después de cambiar el nombre del primer proyecto, se ha cambiado connectionString en la configuración de la aplicación de mi primer proyecto. Así que tuve que cambiar el connectionString en el proyecto WCF también en web.config :)
Volkan
De la documentación de MSDN sobre docs.microsoft.com/en-us/dotnet/framework/data/adonet/… : Las 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.
Suncat2000
13

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

hgcummings
fuente
Esta fue mi solución: cambié el nombre de mi edmx a .old mientras lo copiaba y estaba probando algunas cosas, luego, cuando cambié el nombre, la acción de compilación se configuró en ninguno y, por lo tanto, obtuve este error, resolviéndolo a EntityDeploy resuelto mi problema :)
eth0
Moví mi archivo EDMX a otra carpeta y tuve que cambiar la acción de compilación para que los nombres de los recursos incrustados también se actualicen. ¡Gracias!
David
Esta fue la solución para mí; Perdí esa configuración en el proceso de actualización a .NET Standard. ¡Gracias por salvar mi cordura!
NetherGranite
11

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.

Haga clic-> Construir-> Solución limpia

Luego haga clic-> Construir-> Reconstruir solución

Espero que esto ayude. Gracias a todos

Liakat
fuente
8

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 ...

TobyEvans
fuente
6

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.

Pitming
fuente
6

Para mi caso, se resuelve cambiando las propiedades del archivo edmx.

  1. Abra el archivo edmx.
  2. Haga clic derecho en cualquier lugar del diseñador EDMX
  3. elegir propiedades
  4. Actualización de la propiedad denominada "Procesamiento de artefactos de metadatos" a "Incrustar en ensamblado de salida"

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

usuario464507
fuente
+1,000,000 este fue el problema subyacente para mí hoy. Dificultades para reorganizar los espacios de nombres de productos y consolidar ensamblajes.
Mike
6

Pasé un día entero en este error

si estás trabajando con n-tear architecture

o intentaste separate Modelsgenerar el EDMXformulario DataAccessLayer paraDomainModelLayer

tal vez obtendrás este error

  1. El primer paso para la resolución de problemas es asegurarse de que la cadena de conexión esté webconfig (UILayer)y appconfig (DataAccessLayer)sea ​​la misma
  2. Segundo que es muy importante el connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....

    cuál es el problema

de donde en la tierra obtuve Modelo lo que sea .csdl en mi cadena de conexión donde están

Aquí mi solución mira la imagen

ingrese la descripción de la imagen aquí

espero la ayuda

Basheer AL-MOMANI
fuente
5

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.

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"
Ingeniero de internet
fuente
Desafortunadamente, la cadena de conexión en el asistente no es correcta para app.config. @leqid sugirió una buena forma de arreglar la ruta al modelo.
Der_Meister
5

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)

  1. Reconstruyendo el proyecto e intente nuevamente.
  2. Cerrar y abrir VS: no sé cómo funciona
  3. asegúrese de haber colocado el archivo .EDMX dentro de un Directorio, asegúrese de incluir los Directorios en su ConnectionString. por ejemplo, el mío está dentro de la carpeta DAL. Así se ve así: 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"a ProviderManifestToken="2008"en el archivo EDMX. Para hacer esto:

Explorador de la solución

  1. Haga clic derecho sobre el archivo .edmx
  2. Abrir con..
  3. Editor XML
  4. Cambiar ProviderManifestToken = "XXXX" con 2008

Espero que eso ayude.

ben
fuente
Recientemente tuve este problema después de hacer aparentemente ningún cambio. Intenté reiniciar VS en vano, pero luego se solucionó limpiando y reconstruyendo. Entonces, para otros, si no realizó ningún cambio y nada del resto de esto parece relevante, intente limpiar / reconstruir.
Greg
5

Si está utilizando el edmx de un proyecto diferente, entonces en la cadena de conexión, cambie ...

metadata=res://*/Data.DataModel.csdl

...a...

metadata=res://*/DataModel.csdl
Graham Laight
fuente
Esto es cierto, si desea moverlo a su nueva subcarpeta de proyecto, debe agregar el folder.subfolderanterior.
qakmak
Gracias, esta solución funcionó para mí. Había movido mi archivo .edmx de un directorio en un proyecto a la raíz de otro proyecto, y necesitaba eliminar el nombre del directorio de todas las cadenas de conexión en mi solución.
Chris
4

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.

J. Steen
fuente
4

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.

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />
John Peters
fuente
4

A veces veo este error en mi proyecto. Lo resuelvo por

1 - Haga clic derecho en el archivo EDMX

2 - Seleccionar Run Custom Toolopción

3 - Reconstruir proyecto

MOH3N
fuente
Esto funcionó para mí, pero también tuve que reconstruir después
rdans
3

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.

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

especificaría que csdl / ssdl / msl xml se almacena en el archivo de modelo 'WidgetModel.edmx' que se almacena en una carpeta llamada 'MyModel'.

Janmon
fuente
3

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.

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}
lau
fuente
3

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:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

¡NO FUNCIONARÁ PARA TI! la razón es que YourObjectContextType.Assemblyahora reside en un Assembley diferente (dentro del ensamblaje del proyecto wcf),

Entonces debes reemplazar YourObjectContextType.Assembly.FullName con ->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

que te diviertas.

Robocida
fuente
2

Estaba teniendo problemas con este mismo mensaje de error. Mi problema se resolvió cerrando y volviendo a abrir Visual Studio 2010.

Adán
fuente
2

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.

Antoine Meltzheim
fuente
2

Al tener el mismo problema, recreé edmx desde la base de datos. Resuelve mi problema

صفي
fuente
2
Lamentablemente, eso aborda y trata el síntoma, no la causa.
Clarice Bouwer
2

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 a Web.configConnectionString

Krishna shidnekoppa
fuente
1

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:

eagle779
fuente
1

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.

Chris
fuente
1

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.

Unable to load the specified metadata resource

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 .

Frank Myat Thu
fuente
1

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.

Daniel Hollinrake
fuente
1

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:

<connectionStrings>
    <connectionStrings>
          <add name="name" connectionString="normalDetails"/>
    </connectionStrings>
</connectionStrings>
MyDaftQuestions
fuente