asp.net - page - asp route tag helper
Tiene un elemento DefiningQuery pero no InsertFunction... err (5)
@Palantir. Verifique que ambas tablas tengan las Teclas principales establecidas, y tenga cuidado con las múltiples claves principales establecidas en una tabla.
Esto me está volviendo loco, y el error no tiene sentido para mí:
No se puede actualizar EntitySet ''TableB'' porque tiene DefiningQuery y no existe elemento en el elemento para admitir la operación actual.
Mis tablas se ponen así:
TableA int idA (identity, primary key) ... TableB int idA (FK for 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 intente 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
- Ubique la entidad en el elemento edmx: StorageModels
- Elimine por completo el DefiningQuery
- Cambie el nombre de la tienda: Schema = "dbo" a Schema = "dbo" (de lo contrario, el código generará un error diciendo que el nombre no es válido)
- Eliminar la tienda: propiedad de nombre
Dejé la clave tal como estaba, ya que estaba bien para mí que ambas columnas sean parte de la clave.
Agregue la clave principal a la tabla, elimine el modelo del modelo de edmx, luego seleccione actualizar desde la base de datos, compilar y ejecutar ... funciona
Bueno, cuando una tabla se encuentra sin una clave principal se trata como una vista.
Y las vistas aparecen en el archivo EDMX (abierto en un editor XML para ver) en el elemento StorageModel / EntitySet [n] / DefiningQuery.
Cuando tiene un DefiningQuery, la entidad se convierte en solo de lectura a menos que agregue funciones de modificación. Necesita 3 funciones de modificación (también conocidas como Procedimientos almacenados) una para cada una de Insertar, Actualizar y Eliminar.
Pero tienes dos opciones:
Cambiar la definición de la clave:
- Y convencer al EF de que lo que cree que es una vista es realmente una mesa
- O agregue las funciones de modificación apropiadas
En tu caso, recomiendo (1).
Me faltaba una clave principal en mi mesa y recibí este mensaje de error. Una cosa que noté fue después de que agregué la clave a la tabla, necesitaba borrar la tabla de edmx usando el diseñador, guardar el edmx y luego actualizarlo nuevamente para agregar la tabla nuevamente. No estaba recogiendo la clave ya que ya fue asignado como una vista. Esto no requirió editar el edmx manualmente.
Simplemente agregue una clave principal a la tabla. Eso es. Problema resuelto.
ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)