asp.net-mvc - update - entity framework español
No se puede cargar el recurso de metadatos especificado (5)
Estoy teniendo algunos problemas serios con Entity Framework y parece que no puedo averiguar qué está pasando.
Probé muchas opciones proporcionadas en: MetadataException: no se puede cargar el recurso de metadatos especificado y la publicación del blog de Craig Stuntz en: http://blogs.teamb.com/craigstuntz/2010/08/13/38628/
Tengo 3 proyectos en aras de la brevedad:
Funscribe.Data (archivo EDMX ubicado aquí)
Funscribe.Console (aplicación de consola)
Funscribe.Web (aplicación MVC 3)
Originalmente era solo la aplicación MVC y recientemente agregué este nuevo proyecto de consola.
Copié la cadena de conexión de web.config y la apliqué a mi app.config:
<add name="FundirectoryEntities" connectionString="metadata=res://*/Fundirectory.csdl|res://*/Fundirectory.ssdl|res://*/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost/sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Mi aplicación mvc sigue funcionando, pero cuando ejecuto la aplicación de la consola, me da el temido:
"No se puede cargar el recurso de metadatos especificado".
Intenté cambiar la cadena de conexión a la configuración de comodín:
<add name="FundirectoryEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string="data source=localhost/sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Obtengo: El nombre de EntityContainer predeterminado especificado ''FundirectoryEntities'' no se pudo encontrar en la información de mapeo y metadatos.
Intenté cambiarlo para especificar el montaje:
<add name="FundirectoryEntities" connectionString="metadata=res://Funscribe.Data.dll/Fundirectory.csdl|res://Funscribe.Data.dll/Fundirectory.ssdl|res://Funscribe.Data.dll/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost/sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Obtengo: No se puede resolver el ensamblado ''Funscribe.Data.dll''.
Estoy perdido en lo que debería hacer aquí. Acabo de actualizar este proyecto a Visual Studio 2012 (presento esta nueva aplicación de consola después de convertir a VS 2012).
También noté que el archivo Funscribe.Data.dll está ubicado en la carpeta bin del proyecto de la consola, borré manualmente estos archivos y observé cómo se recreaban. ¡Y lo que me desconcierta es que la aplicación web sigue funcionando correctamente !
Todos los proyectos están en .NET 4.0. La aplicación de la consola utiliza .NET 4.0, no la versión del perfil del cliente.
Cualquier ayuda en este asunto es muy apreciada.
El parámetro de metadatos para una aplicación con un modelo de Entity Framework llamado Model.edmx
en un ensamblaje llamado Simple Mvc.Data.dll
podría tener este aspecto:
<connectionStrings>
<add name="MyEntities" connectionString="metadata=
res://Simple Mvc.Data.dll/Model.csdl|
res://Simple Mvc.Data.dll/Model.ssdl|
res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... -->
Entonces, pueden ver que hay una referencia para cada una de las tres partes del EDMX que necesitamos en el tiempo de ejecución. Todos funcionan de la misma manera, así que examinemos más detenidamente el primero. La referencia CSDL se ve así:
res://Simple Mvc.Data.dll/Model.csdl
Especifica tres cosas:
Estamos cargando el CSDL de un recurso. Esa es la parte
"res://" part.
El nombre del ensamblaje que contiene el recurso,
"Simple Mvc.Data.dll"
. Si su conjunto tiene un nombre seguro, puede especificar un nombre fuerte, en todo su esplendor detallado, aquí.El nombre del recurso en sí,
"Model.csdl"
. No confunda esto con el EDMX o el nombre del modelo. En este caso, resultan ser los mismos, excepto por la extensión, ¡pero eso no siempre es cierto!
Probablemente fallará si sus recursos no tienen el mismo nombre que su modelo, o si no se carga el ensamblaje.
Para obtener más información, consulte esta sección http://blogs.teamb.com/craigstuntz/2010/08/13/38628/
Espero que esto te ayude.
En mi caso, connectionString está tratando de encontrar los archivos de recursos pero no puede. Lo que hice para resolver mi problema es:
Haga clic con el botón derecho en el diagrama EDMX -> Vaya a propiedades -> Conexión -> Procesamiento de artefactos de metadatos -> Luego cambie a Copiar en el directorio de salida y reconstrúyalo.
Esto cambiará el punto de ruta de la cadena de conexión de los metadatos a los recursos que está tratando de encontrar.
La solución de reconstrucción en Visual Studio me ayudó.
Está en Construir -> Reconstruir
MetadataException: no se puede cargar el recurso de metadatos especificado
Esto significa que la aplicación no puede cargar el EDMX.
Hay varias cosas que pueden causar esto, pero muy probablemente, debido a una cadena de conexión no válida.
Soluciones posibles:
1.Compruebe la cadena de conexión 2.Refresh model.edmx 3.Seleccione la opción "Actualizar modelo de la base de datos" en model.edmx
en mi caso, elimino mi archivo EDMX en el proyecto y lo vuelvo a crear con un nombre nuevo, por ejemplo. antes era Home_Model, luego es Home_Cost. cuando intento invocar el código siguiente, tiene "No se puede cargar el recurso de metadatos especificado". error. /////
using (var currentEntities = new masterEntities())
{
currentUser = currentEntities.Home_User.FirstOrDefault(
x => x.UserLoginAccount == userLoginAccount && x.UserPwd == userPwd);
}
//// así que en Web.config, modifico la configuración de metadatos de Home_Model a Home_Cost.
entonces funciona. obviamente, VS2015 (mi versión) no actualizó web.config cuando borro / creo edmx.