¿Por qué recibo este error: no se ha especificado ninguna asignación para el siguiente EntitySet / AssociationSet - Entity1?

96

Estoy usando Entity Framework 4 con el enfoque Model First.

Empecé el proyecto, diseñé las entidades y generé la base de datos. Todo funcionó bien.

Luego tuve que regresar y agregar otra entidad a mi modelo. Sin embargo, cuando arrastro una entidad al EDMX, aparece este error:

ingrese la descripción de la imagen aquí

¡Bien! Solo necesito mapear Entity1 a una tabla .. ¡Pero bueno! Estoy usando el enfoque Model First, espero que me cree la tabla cuando genere el DDL.

¿Cómo puedo solucionar este error?

André Pena
fuente
1
Entonces, ¿puede generar un script de base de datos a partir de su modelo?
Ladislav Mrnka

Respuestas:

147

Esto se debe a la forma en que EF4 funciona con model-first.

Cuando crea por primera vez un modelo de modelo primero, está en un estado en el que el SSDL no existe. Puede arrastrar entidades, asociarlas, etc. y, sin embargo, si observa la SSDL en el archivo EDMX, verá que ninguna de las entidades tiene una tabla de almacenamiento asociada en la SSDL.

Eso cambia cuando hace clic en el Generate Database From Modelelemento del menú contextual. La parte confusa es que esta acción hace más que simplemente generar un script DDL. De hecho, cambia el archivo EDMX para incluir información SSDL. A partir de este punto, el archivo EDMX entrará en un estado en el que cada entidad del diseñador / CSDL debe mapearse a una entidad del SSDL. Si uno no se asigna, activará un error de tiempo de compilación:

No se ha especificado ninguna asignación para el siguiente EntitySet / AssociationSet - (EntityName)

Otro hecho interesante es que no es el tipo de error que impedirá la compilación. De hecho, generará la biblioteca de clases de salida. ¿No debería ser una advertencia o algo así?

Para evitar este error, todo lo que tiene que hacer después de insertar una nueva entidad es Generate Database From Modelvolver a hacerlo . Eso actualizará el SSDL y corregirá las asignaciones.

EDITAR

Si no está utilizando el modelo primero y "actualiza desde la base de datos", también tendrá este error en el caso de que haya eliminado una tabla en DB Server. Esto se debe a que Entity Framework no eliminará automáticamente la entidad por usted. Elimine la entidad manualmente y el error desaparecerá.

André Pena
fuente
1
Tuve el mismo problema después de actualizar mi modelo con los cambios de bd (eso no podría ser bueno, ya que mi enfoque no es el primero del modelo).
balanza
5
@balanza, cuando no está usando model-first y actualiza su modelo en función de la base de datos, obtendrá este error cuando elimine una tabla en el servidor porque el diseñador EF NO eliminará la entidad automáticamente. Cuando elimina manualmente el tipo de entidad, el error desaparecerá
André Pena
Cambié el mío directamente en el archivo xml del modelo de datos de la entidad. Tenía un montón de tablas y funciones y existía el riesgo de que no coincidieran, por lo que lo hice manualmente.
Bat_Programmer
Esto es SUPER útil. Además, si está utilizando model-first y "update from database" y obtiene nuevas tablas, también tendrá el error. Pero ejecutar Generate Database from Model (no es necesario ejecutar realmente el script generado, ¡matará sus datos!) Solucionará los problemas de mapeo en su código y no tendrá problemas para usarlo en el futuro.
Brian Warshaw
1
¿Cómo manejaría la actualización del esquema para la base de datos de SQL Server CE ya implementada? Puede mover esto a una pregunta separada, si es un procedimiento totalmente no relacionado
FYK
35

Descubrí que estaba obteniendo el mismo error porque había olvidado crear una restricción referencial después de crear una asociación entre dos entidades.

Mal
fuente
13
FYI: Verifique las propiedades de la asociación, y en la parte inferior, "Restricción referencial" estará vacía. Haga clic en la elipsis y cree una restricción.
Patrice Calvé
Eso me ayudó. Tuve que crear una relación 1 .. * desde mi entidad de origen a mi entidad de navegación.
duyn9uyen
21

Error 3027: No se ha especificado ninguna asignación para el siguiente EntitySet / AssociationSet ... "- Entity Framework dolores de cabeza

Si está desarrollando un modelo con Entities Framework, a veces puede encontrarse con este molesto error:

Error 3027: No se ha especificado ninguna asignación para el siguiente EntitySet / AssociationSet [Nombre de entidad o asociación]

Esto puede no tener sentido cuando todo se ve bien en el EDM, pero eso se debe a que este error no tiene nada que ver con el EDM normalmente. Lo que debería decir es "regenerar los archivos de su base de datos".

Verá, las entidades verifican el SSDL y el MSL durante la compilación, por lo que si acaba de cambiar su EDM pero no usa Generar modelo de base de datos ... entonces se queja de que faltan cosas en sus scripts sql.

así que, en resumen, la solución es: "No olvide generar el modelo de base de datos cada vez que actualice su EDM si está desarrollando el primer modelo. Espero que su problema esté resuelto".

Azeem ahmad
fuente
Esto funcionó para este mismo error al generar el modelo de base de datos que ayudó a borrar la excepción
kolexinfos
7

En mi caso, otro desarrollador había eliminado algunas de las tablas de la base de datos subyacente. Cuando me di cuenta de esto y eliminé estas tablas de la entidad, el problema se resolvió. No fue tan obvio como parece.

Graham Laight
fuente
6

Me encontré con el mismo error, pero no estaba usando model-first. Resultó que de alguna manera mi archivo EDMX contenía una referencia a una tabla aunque no aparecía en el diseñador. Curiosamente, cuando hice una búsqueda de texto para el nombre de la tabla en Visual Studio (2013), no se encontró la tabla.

Para resolver el problema, utilicé un editor externo (Notepad ++) para encontrar la referencia a la tabla ofensiva en el archivo EDMX, y luego (con cuidado) eliminé todas las referencias a la tabla. Lamento decir que no sé cómo el archivo EDMX llegó a este estado en primer lugar.

batpox
fuente
5

Tuve un cambio de tabla y creó otra entidad con un número 1 al final (como MyEntity1y a MyEntity) según lo confirmado por el navegador de modelos edmx. Algo acerca de las dos entidades juntas confundió el procesamiento.

La eliminación de la mesa y volver a agregarla la arregló.


Tenga en cuenta que si TFS está conectado, haga un check-in del edmx después de la eliminación. Entonces, y solo entonces, obtenga la última versión y vuelva a agregarla en un proceso definido de dos pasos. De lo contrario, TFS se confunde con eliminar y volver a agregar entidades con el mismo nombre, lo que parece causar problemas.

ΩmegaMan
fuente
Tuve el mismo problema después de un cambio de mesa. Encontré las mismas entidades con un número 1 y 2 (MyEntity1, MyEntity2) en varios lugares bajo el modelo. Busqué en cada rama (diagramas, tipos de entidad, etc.) y eliminé cada instancia de MyEntity y MyEntity [n]. Por si acaso, hice una "Solución limpia" y luego actualicé desde la base de datos para volver a agregar solo MyEntity.
MsTapp
4

Una forma más rápida para mí fue eliminar las tablas y volver a agregarlas. Los asignó automáticamente. :)

Atul K.
fuente
2

Para aquellos que están usando el Database Firstenfoque, todo lo que tienen que hacer después de insertar una nueva entidad es Generate Database From Modelvolver a hacer clic con el botón derecho en su .edmxarchivo y seleccionarGenerate Database From Model...

Masoud Darvishian
fuente
0

Tuve este error cuando borré una tabla de la base de datos. Lo resolvió haciendo clic derecho en el diagrama EDMX, yendo a Propiedades, seleccionando la tabla de la lista en la ventana Propiedades y eliminándola (usando la tecla de borrar) del diagrama.

vive el amor
fuente
0
  1. Vaya al Explorador de soluciones, haga clic en el botón Buscar
  2. Deje marcados ambos Search within file contentySearch External Files
  3. Escriba el nombre de las entidades que su mapeo no reconoce.
  4. Elimina todos los archivos RELACIONADOS con el problema. Esos probablemente llevarán el nombre de la misma entidad que falta. NO elimine ningún archivo con su nombre de clase de contexto en el archivo, especialmente si sus extensiones son .cs o .tt. En el archivo Context .cs .
  5. elimine todas las líneas de códigos que hagan referencia a la entidad que falta. Se verán así:

    public virtual DbSet< Entity1> Entity1 { get; set; }

Este error es común a las tablas eliminadas de la base de datos.

Cuando se coloca una tabla en la base de datos, o simplemente se cambia la web.config.connectionStringsde la base de datos EF Mapped, el problema es apuntar a una nueva y no a la utilizada para generar las asignaciones originales.

Es esta nueva base de datos, estas entidades con el error 3027 no están presentes.

MarcoSantana
fuente
0

Tuve el error cuando intentaba hacer un resultado personalizado para un procedimiento almacenado y asumí que tenía que ser una entidad.

La solución fue que hice un tipo complejo en el navegador de modelos y lo asigné como resultado a "Editar funciones de importación".

Lo agregaré aquí, ya que parece que esta pregunta es a dónde lo lleva Google cuando recibe este error.

Thomas Koelle
fuente
0

Había configurado todo correctamente (cardinalidades y propiedades dependientes) pero no podía entender por qué sigo recibiendo errores. Finalmente descubrió que, EF generó una columna en la tabla dependiente por sí sola (table_tablecolumn) y no tiene ninguna relación con la tabla, por lo que no se especificó ningún mapeo. Tuve que eliminar la columna en el archivo EDMX y reconstruir la solución que solucionó el problema. Estoy usando el enfoque DB.

usuario2965957
fuente
0

Actualizar modelo de base de datos no funciona para mí.

Tuve que eliminar la entidad en conflicto, luego ejecutar Update Model from Database, finalmente reconstruir la solución. Después de eso, todo funciona bien.

Willy David Jr
fuente
0

Compartiendo esto con otras personas. En mi caso, estábamos trabajando en una solución MVC compartida y usando un módulo común para tablas que usamos para menús desplegables. Recibí el error cuando actualicé el modelo de Entidad agregando una nueva tabla. Resulta que cuando actualicé el EDMX, probablemente actualizó mis derechos de acceso a la base de datos, lo que resultó en no tener acceso a esa determinada tabla que me da no mapping specified.

Simplemente volver a agregar y dar acceso a mi usuario resolvió el problema.

AdorableVB
fuente
0

Creo que obtuve esto al no eliminar explícitamente algunas tablas del edmx antes de cambiarles el nombre y volver a agregarlas. En su lugar, simplemente renombré las tablas y luego hice un modelo de actualización de la base de datos, pensando que las vería desaparecer y las eliminaría del modelo. Luego hice otro modelo de actualización de la base de datos y agregué las tablas renombradas.

El sitio estaba trabajando con las nuevas tablas, pero tuve el error. Finalmente, noté que las tablas originales todavía estaban en el modelo. Los eliminé del modelo (haga clic en ellos en la pantalla edmx, elimine la clave) y luego desapareció el error.

apswrk
fuente