entity-framework - recuperar - su proyecto hace referencia a la version mas reciente de entity framework oracle
No se pudo encontrar la informaciĆ³n de correspondencia y metadatos de EF para el error EntityType (13)
He encontrado una excepción cuando uso Entity Framework 4.0 RC. El modelo de My Entity Framework está encapsulado en un ensamblado privado cuyo nombre es Procurement.EFDataProvider y mis clases POCO están dentro de otro assembly. Procurement.Core La relación entre Core (Business Logic) y EFDataProvider (Data Access) es con una fábrica llamada DataProvider.
así que cuando intento crear un conjunto de objetos
objectSet = ObjectContext.CreateObjectSet<TEntity>();
Me sale un error:
No se pudo encontrar la información de mapeo y metadatos para EntityType ''Procurement.Core.Entities.OrganizationChart''.
En mi caso, era esencialmente el mismo problema, el mapeo no era exactamente como se esperaba. Lo que me sucedió fue que había movido una propiedad en una "herencia Table Per Hierarchy" de una de las subclases a la clase base y olvidé actualizar el modelo.
Tengo un POCO personalizado y al copiar el archivo edmx en un nuevo proyecto en blanco, dejé que autogenere las entidades y luego las comparé con lo que me ayudó a encontrar la diferencia.
Esto es probablemente porque EF no puede encontrar la información de asignación incrustada. Dentro de tu cadena de conexión probablemente tendrás algo como el suyo:
metadata=res://*/Models.MyModels.csdl|...etc
Ese * es un comodín que le dice al contexto del objeto que intente buscar la información de asignación incrustada, creo, escaneando todos los ensamblajes cargados. Si el ensamblaje no está cargado, EF no lo encontrará.
Lo que debe hacer es proporcionar la cadena de conexión con más información sobre dónde está incrustada su información de asignación. Cambie el * al nombre del ensamblado específico de su código de mapeo:
metadata=res://Procurement.EFDataProvider/Models.MyModels.csdl
Si eso falla, encuentre el ensamblado y cárguelo directamente en su ObjectContext usando:
ObjectContext.Metadataworkspace.LoadFromAssembly();
Mi problema era que había editado la plantilla T4 para excluir el campo de replicación llamado "msrepl_tran_version". Esto causó que la base de datos no coincidiera con las clases generadas, lo que puede causar este mensaje de error. Solo asegúrate de que tu base de datos y tus clases coincidan.
No relacionado directamente con lo anterior, pero si recibe este mensaje de error y ha mezclado un POCO y un modelo regular: ¡mala idea!
Ver también el comentario de JRoppert en EF4 POCO (sin usar T4): la información de asignación y metadatos no se pudo encontrar para EntityType (¡gracias JRoppert!)
Obtuve este error porque tenía más de un archivo edmx en el mismo ensamblado sin el uso adecuado de espacios de nombres personalizados.
Esto es lo que se dice sobre la excepción en System.Data.Objects.ObjectContext
// Excepciones:
// System.InvalidOperationException:
// When the System.Data.Metadata.Edm.EntitySet from entitySetName
// does not match the System.Data.Metadata.Edm.EntitySet of the object’s
// System.Data.EntityKey.
// -or-
// When the System.Data.Objects.ObjectContext.DefaultContainerName
// property is not set on the System.Data.Objects.ObjectContext and
// the name is not qualified as part of the entitySetName parameter.
// -or-
// When the specified type belongs to more than one entity set.
Otro posible problema es que si usa código primero y su tipo de entidad se define en un ensamblaje separado donde se define el contexto y no ha agregado ninguna asignación personalizada al OnModelCreating(DbModelBuild modelBuilder)
, entonces EF parece ignore las anotaciones de datos.
Solución:
Añada modelBuilder.Entity<YourEntityType>();
al OnModelCreating(DbModelBuild modelBuilder)
.
Para cualquier otra persona que lidia con el error, creo que vale la pena mencionar algunos escenarios que he encontrado que causan este error (extremadamente inútil):
- Propiedades mal escritas (¡distingue entre mayúsculas y minúsculas!)
- Propiedades que faltan en la clase POCO
- Escriba desajustes entre el POCO y el tipo de entidad (p. Ej., Int en lugar de long)
- Enumeraciones en POCO (EF no admite enumeraciones en este momento, según tengo entendido)
Puede haber otras causas también.
HTH
Puede haber otra razón. También tiré de mi cabello por una noche.
Resulté que hay algún desorden en las referencias de la solución. En mi proyecto, el edmx
pertenece a un proyecto llamado DataAccess.Dll
. Pero no tengo referencia de mi exe. Desde mi exe tengo una referencia a otro proyecto llamado Business.Dll
, y este proyecto tiene una referencia y una ubicación antigua para DataAccess.DLL
.
Realice la siguiente prueba para ver si tiene ese problema:
- Abra el administrador de bin de su proyecto exe y manténgalo visible.
- Construye la solución.
- El primer proyecto que se construirá es el proyecto de acceso a datos, y puede ver en la carpeta bin la hora actual como su fecha de modificación.
- Mientras se crean otros proyectos, verá que la fecha de modificación del proyecto de DataAccess se cambió a una anterior.
Debe verificar sus referencias y asegurarse de que se refieran a las ubicaciones de actualización de sus dlls.
Simplemente verifique la ortografía de la propiedad con el modelo
También lo he visto cuando la cadena de conexión no está especificada en el archivo de configuración.
Tuve un problema donde agregué algunas columnas a una tabla.
En las asignaciones de tabla, he cambiado el nombre de los nombres de columna.
Aunque había ejecutado ''Transformar todas las plantillas'' y reconstruido la aplicación, todavía tengo el ''El tipo de metadatos asociado para el tipo <> contiene el siguiente error de propiedades o campos <>''.
La clase para esta tabla en Domain.Poco.tt era correcta, pero encontré el archivo class.Metadata.cs correspondiente en Domain.Poco.MetaData.tt no se había actualizado, y tenía las nuevas columnas con los nombres originales, no el nuevo unos que había especificado en Table Mapping.
¿Solución? Acabo de eliminar la clase de metadatos ofensiva y volví a ejecutar ''Transformar todas las plantillas'' y se volvió a crear correctamente, con los nombres correctos de columna / función.
Tuve un problema similar. Ya tenía un archivo EDMX para una base de datos usando clases POCO y un objeto Contexto que escribí yo mismo. Cuando agregué un segundo EDMX para una base de datos diferente, utilicé la plantilla POCO T4 y luego ni EDMX funcionó y arrojó el error que mencionaste. Para resolverlo deseché mi POCO y Contexto personalizado y usé solo la Plantilla T4 y todo funcionó bien nuevamente.
un error novato, pero tuve el error cuando mi acceso a la base de datos era con un nombre de usuario y contraseña de solo lectura. Espero que mis errores ayuden a otros.