ADO.NET Entity Framework: el Asistente de actualización no agregará tablas

93

Yo añadí un nuevo modelo de entidad de datos ADO.Net en mi proyecto y se utiliza el asistente de actualización para agregar tablas en el modelo. Se agregaron cinco de las tablas seleccionadas a la superficie de diseño. No se agregarán otras dos tablas. Los selecciono en el asistente y hago clic en Finalizar, pero nunca aparecen en la superficie de diseño.

¿Es esto un error o hay algunas situaciones en las que no se puede agregar una tabla al modelo (por diseño)?


ACTUALIZACIÓN: El XML (* .edmx) revela el problema.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->
Robert Claypool
fuente
8
Esto debería tener MUCHO más votos. No tenía idea de que Visual Studio no pudiera agregar la tabla ya que el archivo .edmx es el único lugar donde realmente va el error. ¡Ojalá tengan un cuadro de diálogo en la v2!
John Bubriski
+1 - En mi caso, no hubo mensaje de error.
teynon
Como notó, las tablas que no se importarían no tenían claves primarias. Agregue un PK y listo.
Eric

Respuestas:

46

La superficie de diseño es diferente del modelo de entidad. Es posible tener una tabla en el mapeo en su EDMX que no aparece en la superficie de diseño. Vea el archivo como XML para ver si este es el caso. En este caso, el Asistente de actualización no le permitirá volver a agregar las tablas, ya que ya forman parte del modelo de entidad. Entonces, en términos generales, el Asistente de actualización sabe más sobre su modelo de entidad que sobre la superficie de diseño, per se .

No creo que esa sea exactamente la situación en la que se encuentra, pero debería darle una idea general de la solución: ingrese al XML y busque referencias a las tablas en cuestión.

Craig Stuntz
fuente
4
Acabo de tener este mismo problema, eliminé una tabla del modelo y cuando fui a agregarla nuevamente, el diseñador visual no la mostró como si estuviera en la base de datos. Para solucionarlo, eliminé el texto del archivo .edmx, pero me las arreglé para estropear el XML. Si hace esto, primero haga una copia de seguridad del archivo, por si acaso. Afortunadamente, pude encontrar la etiqueta desordenada con git diff.
GrandMasterFlush
41

Configure las claves primarias para todas las tablas o solo una casilla de verificación sin marcar "Permitir nulo" en cualquier columna de cada tabla. Esto funciona para mi :)

Parvinder
fuente
2
Creo que esta es la respuesta correcta, al menos para mí. ¡Gracias!
Eric
@Parvinder, he tenido problemas con este problema en la mayor parte de mi proyecto. Finalmente, tu respuesta me lo dejó todo claro. En mi caso, en la tabla de unión no especifiqué el campo de clave No nula o solo la clave principal. Después de arreglar esto, tuve la tranquilidad. Muchas gracias
PatsonLeaner
Lo que entendí con la resolución es que no podemos agregar una tabla al modelo de entidad si i) esa tabla no tiene una clave principal o (ii) no hay una columna Permitir nulo en esa tabla.
Murtuza Khan
10

1.Cambie la estructura de la tabla y agregue una columna principal. Actualice el modelo.

2.Modifique el archivo .EDMX en el Editor XML e intente agregar una nueva columna debajo de la etiqueta para esta tabla específica. (NO TRABAJARÁ)

3.En lugar de crear una nueva columna principal para salir de la tabla, haré una clave compuesta involucrando todas las columnas existentes (TRABAJADO)

Entity Framework: agregar DataTable sin clave principal al modelo de entidad.

Pratap
fuente
Me encontré con este mismo problema. El modelo de entidad estaba agregando la tabla, sin embargo, no se mostraba en el diseñador. Tampoco pude acceder a él en código. Agregué una clave de campo de identificación ... ¡funcionó!
Ravi Ram
6

Yo también tuve este problema, todo lo anterior no funcionó para mí. Lo que me ayudó fue lo siguiente.

Cuando intenta conectarse con una base de datos, esa base de datos puede tener diferentes usuarios con diferentes credenciales que puede aceptar. Digamos que el usuario A hasta D.

Si intenta conectarse con un usuario, asegúrese de que el usuario tenga habilitadas las credenciales correctas, en este caso, las opciones de lectura y escritura habilitadas.

Para hacer esto, inicie MS SQL Server Managment Studio, conéctese con su servidor SQL y seleccione la base de datos con la que intenta conectarse en Visual Studio. En 'your_dbname' -> Seguridad -> Usuarios, encontrará una lista de usuarios. Haga clic con el botón derecho en el nombre de usuario con el que intenta iniciar sesión y seleccione propiedades. Se abre una ventana. Seleccione la página 'General' (seleccionada de forma predeterminada) y en la pestaña 'Membresía de función de base de datos' asegúrese de que 'db_datareader' y 'db_datawrite' estén seleccionados.

Nota: Cuando inicie sesión también en MS SQL Server Managment Studio, asegúrese de iniciar sesión con un usuario que pueda habilitar / deshabilitar estas opciones ...

Kip ei
fuente
5

Busque 'Nulos' en su tabla particular. Si todas las columnas están configuradas en 'Permitir nulo', Entity Framework lo considera como una tabla 'Nulo'. Tuve el mismo problema y desmarqué 'Permitir nulo' y agregó la tabla requerida.

Ketan Dubey
fuente
1
¡Funciona, estúpido no aparece ningún error ni advertencia en los registros!
RolandoCC
3

No se agregarán tablas sin claves primarias.

usuario8155123
fuente
1

Esto se ha resuelto en la última versión (entorno: VS 2012, .net framework 4.5). Simplemente abra el archivo .edmx y agregue las tablas / procedimientos almacenados / vistas requeridos. La tabla / vista que no tiene clave principal se creará como tabla / vista de solo lectura.

La tabla / vista 'TABLE_NAME' no tiene una clave primaria definida. La clave se ha inferido y la definición se creó como una tabla / vista de solo lectura.

Gyaneshwar Rao N
fuente
1
el error permanece en algunos casos de todos modos evento en EF 5.0
Greg Z.23 de
0

No es necesario eliminar todo el modelo (¡pueden ser cientos de tablas!).

El asistente puede manejar "agregar nuevos" elementos, pero algunos cambios, como cambiar claves compuestas y renombrar columnas, no sabe qué hacer, por lo que no lo intenta, y las cosas se desincronizan.

ASÍ: BORRE las tablas en cuestión del Modelo (modo conceptual) Y de Model.Store, y luego actualice el modelo usando el Asistente y vuelva a agregar solo las tablas en cuestión.

RoyGr
fuente
0

Solo lanzo más detalles para cualquiera que no haya tenido que hacer esto antes. Estoy usando Visual Studio 2013 con la actualización 4 instalada. Agregué algunos campos a una tabla, eliminé la tabla de mi modelo y luego fui a actualizar y no me dejaba verificar ninguna de las tablas.

Tengo una clave principal.

Creé una nueva tabla de prueba, que apareció y me permitió verificarla, pero no la original.

Nunca antes lo había abierto en XML y no sabía cómo hacerlo. Haga clic derecho en el archivo .edmx y "abrir con" - elija el editor xml.

la tabla en cuestión estaba allí bien, incluso tenía los nuevos campos (extraño).

Eliminé todas las referencias (tomé un par de veces); después de eliminar una y guardar, si intenta abrirla y no se muestra, siga adelante y elija "ver XML", mire los errores y básicamente siga la pelota que rebota hasta que la haya limpiado.

Espero que el detalle extra ayude a alguien.

Joe

Joe Ruder
fuente
0

Una forma fácil que encontré fue (en SQL Server Management Studio) agregar una columna de ID de tipo INT, anular la selección de "Permitir nulos", y en Propiedades de columna (de ID) >> Especificación de identidad >> comprobar (Es identidad) y hacer seguro que el incremento está configurado.

Una vez hecho lo anterior, vuelva a su ventana .edmx, haga clic con el botón derecho y actualice el modelo desde la base de datos.

Ryan D
fuente
0

Puede agregar una tabla cruzada de columnas de clave principal. Entonces el problema se está resolviendo

Mehmet Kurt
fuente
0

Otra solución es asegurarse de que la cuenta a través de la que está accediendo a la base de datos tenga algunos permisos para la tabla, seleccione al menos. La tabla no se agregará si la cuenta no tiene permisos para ella.

En SSMS, en Seguridad, haga clic con el botón derecho en el usuario o rol y luego en Propiedades. Luego haga clic en Securables. La tabla superior muestra las tablas actualmente accesibles. Si las tablas que faltan no están allí, haga clic en buscar y busque, resáltelas en la tabla superior y luego asigne permisos en la tabla inferior

Mark Worrall
fuente