Esto me está volviendo loco, y el error no tiene sentido para mí:
No se puede actualizar el EntitySet 'TableB' porque tiene un DefiningQuery y no existe ningún elemento en el elemento para admitir la operación actual.
Mis tablas se ponen así:
Tabla A int idA (identidad, clave primaria) ... TableB int idA (FK para TableA.idA) int val
TableB no tiene una clave primaria definida en el servidor SQL. Entity Framework ha importado la tabla y la asociación y ha establecido ambos campos como clave. ¡Pero generará ese error cuando intento hacer una inserción en la tabla!
¿Qué pasa?
Editar: como lo sugirió Alex, la solución fue esta:
- Haga clic derecho en el archivo edmx, seleccione Abrir con, editor XML
- Localice la entidad en el elemento edmx: StorageModels
- Eliminar el DefiningQuery por completo
- Cambie el nombre de la tienda: Schema = "dbo" a Schema = "dbo" (de lo contrario, el código generará un error que indica que el nombre no es válido)
- Eliminar la tienda: propiedad Nombre
Dejé la clave como estaba, ya que estaba bien para mí que ambas columnas sean parte de la clave.
asp.net
entity-framework
Palantir
fuente
fuente
Respuestas:
Bueno, cuando se encuentra una tabla sin PrimaryKey, se trata como una Vista.
Y las vistas se muestran en el archivo EDMX (abierto en un editor XML para ver) en el elemento StorageModel \ EntitySet [n] \ DefiningQuery.
Cuando tiene una DefiningQuery, la Entidad se vuelve de solo lectura a menos que agregue funciones de modificación. Necesita 3 funciones de modificación (también conocido como Procedimientos almacenados), una para cada una de Insertar, Actualizar y Eliminar.
Pero tienes dos opciones:
Cambiar la definición clave:
En tu caso te recomiendo (1).
fuente
Simplemente agregue una clave primaria a la tabla. Eso es. Problema resuelto.
fuente
Me faltaba una clave principal en mi mesa y recibí este mensaje de error. Una cosa que noté fue que después de agregar la clave a la tabla, necesitaba borrar la tabla del edmx usando el diseñador, guardar el edmx, luego actualizarlo nuevamente para agregar la tabla nuevamente. No estaba recogiendo la clave ya que fue asignado como una vista. Esto no requirió editar el edmx manualmente.
fuente
Agregue la clave principal a la tabla, elimine el modelo del modelo edmx, luego seleccione actualizar desde la base de datos, compile y ejecute ... funciona
fuente
@Palantir. Verifique que ambas tablas tengan configuradas las Claves primarias y tenga cuidado con las múltiples claves primarias establecidas en una tabla.
fuente
Espero que resuelva el problema.
fuente