Hoy cogería al arquitecto responsable de los mensajes de error de Linq to Entities por el cuello y lo ahogaría – pero sin matarlo – por la tarde perdida siguiendo un mensaje de error que desorientaba y que me hizo recorrer los profundos vericuetos de San Google para, al final, hallar la solución en mis narices.
Compañeros: Cuando tienes una bonita entidad y le creas un método de actualización como:
Compañeros: Cuando tienes una bonita entidad y le creas un método de actualización como:
public bool ModificarAsignacion(string codDeposito, int idTurno) { Madrid_MovilidadEntities dbv = new Madrid_MovilidadEntities(); var asig = (from asignacion in dbv.Conductores_Gruas where asignacion.codigo_deposito == codDeposito && asignacion.id_turno == idTurno && asignacion.asignado == true select asignacion); if (asig.LongCount() > 0) { foreach (Conductores_Gruas asignados in asig) { asignados.asignado = false; } dbv.SaveChanges(); }
Y cuando, lo lanzas se te queda tostado el servidor - si le tienes un Try Catch puesto – o te sale un mensaje espantoso que dice algo así:
“La búsqueda de no se pudo actualizar entityset 'conductores_gruas' porque tiene <definingquery> y no existe ningún elemento <updatefunction> en el elemento <modificationfunctionmapping> que admita la operación actual. no obtuvo ningún resultado.”
No te agobies buscando y buscando. Es más no te compliques la vida cambiando de tecnología e intentándolo con Linq to SQL (tampoco te va a funcionar y tampoco te va a decir porqué). La solución es mucho más sencilla.<
En tu modelo de datos hay una tabla sin clave o claves primarias
Lo cual lleva al ORM a avisarte (si es cierto que avisa, pero no le hice ni caso) y te crea una vista o entidad de esta tabla SOLO PARA LECTURA.
Por lo cual la solución es modificar el modelo de datos para que esa tabla tenga al menos una clave primaria. Y actualizar (yo lo borré y lo hice de nuevo) el modelo de entidades… y voala!!
“La búsqueda de no se pudo actualizar entityset 'conductores_gruas' porque tiene <definingquery> y no existe ningún elemento <updatefunction> en el elemento <modificationfunctionmapping> que admita la operación actual. no obtuvo ningún resultado.”
No te agobies buscando y buscando. Es más no te compliques la vida cambiando de tecnología e intentándolo con Linq to SQL (tampoco te va a funcionar y tampoco te va a decir porqué). La solución es mucho más sencilla.<
En tu modelo de datos hay una tabla sin clave o claves primarias
Lo cual lleva al ORM a avisarte (si es cierto que avisa, pero no le hice ni caso) y te crea una vista o entidad de esta tabla SOLO PARA LECTURA.
Por lo cual la solución es modificar el modelo de datos para que esa tabla tenga al menos una clave primaria. Y actualizar (yo lo borré y lo hice de nuevo) el modelo de entidades… y voala!!
41 comentarios:
Groso :D
Gracias tío!!! Después de perlearme un poquito, tiré de Google y ¡voilà! encontré el fallo. Menos mal que si no sabe Dios el tiempo que perdería.... ¡Mil gracias!!
Bruuuto!
La verdad es que mi tabla sí que tenía clave primaria, pero fue comprobarlo, actualizar las tablas por si había algún problema y... por lo visto lo había. Estupendo!
GRacias
Maestro de maestros!!!
Se agradece amigazo.
gracias me haz salvado de horas de investigacion.
Saludos.
Eres el fucking MASTER!!
mil gracias, por gente como tu aún segimos en ASP.NET que si no,... de mi parte lo hubiera aventado a la basura !!!! ja ja ja muy buena tu aportacion.
Grandeeeeeeeeeeee Gracias Totales
Se te agradece mucho el aporte, me has evitado una perdida de tiempo buscando una solucion, gracias y sigue adelante
Gracias hermano!!!
un abrazo
eso esta bien porque lo que dise el mensage la lanza no es ni parecido a el fallo(gracias...)
Muchas gracias! Aportaciones como estas de verdad se agradecen! :D
Grande Viejo... gracias.
Gracias Doctor, me sacaste de un gran apuro.
Que buen aporte hermano, ese error seguro me llevaría horas encontrarlo, muchas gracias !!!!
Genial me salvo la vida el dia de hoy gracias
Gracias me salvaste un dia de trabajo
Efectivamente, muchas gracias. La verdad es que tienes toda la razón. Se han lucido con el mensajito. definí las claves primaria de las tablas y me fue bien.
Wow, en verdad debería estar mejor documentado el error. mil gracias.
Despues de hacer caso a tu consejo ya que mi tabla le faltaba definir una clave me arrojo lo siguinete
...Error al recuperar valores desde ObjectStateEntry...
Pero logre arreglarlo tudb.edmx la clave de la tabla estaban mal y no eran iguales a la DB en SQL, a pesar que corri el proceso que actualice pero bue no funcionaba. Asi que toque las claves del .edmx y listo!
Gracias por tu ayuda hacia un tiempo que lo lograba resolverlo.
Gracias tío por el aporte... Me salvaste la vida....
Vaya, si tenías razón, que tontería, pues ya podrían ser más claros con el error, es la única tabla que se me había pasado de crear un INDICE PRIMARIO.
1000 Gracias
Toni
y si mi tabla no necesitara primary key que basicamente es una tabla dependiente o secundaria como resolver esto?
Gracias tronco!!!!!
Aleks
Me has ahorrado horas de perder el tiempo, thank youuuu
Gracias, no me lo hubiese imaginado en la vida, me has ahorrado mucho tiempo.
Bueno me sirvió mucho la publicación, debo agregar que ojo porque tiene que ser primary key, nada de index ni unique key.
agradecido...
Justo me acaba de pasar esto!!! muchas gracias!!! revisando encontré que había 2 tablas sin PK, ya lo arreglé en SQL, cómo hago para corregirlo en mi Model más fácil??
Gracias
Muchas gracias hermano, inicialmente todo de funcionaba y de repente dejo de funcionar y efectivamente, no tenia clave primaria...
Gracias, me has ahorrado comerme la cabeza, había warnings abajo pero a veces pasas de ellos como de comer mierda. XD
oooooo eres un dios! te amo viejo! jajajajaja eso mismo me acaba de pasar :|, GRACIAS!
Esto sucede cuando el Entity data model es distinto a la base de datos en cuanto a claves, relaciones, restricciones etc. Saludos.
Gracias viejito... yo tambien te amo....
Que Dios te lo pague.
Nunca comentar algo. Gracias!
Monumental!
GENIO TOTAL!!!
Excelente solución, eres un experto y me ahorraste medio día de búsqueda
ERES EL MEJOR!!!!!
Gracias, verdaderamente util :D
Publicar un comentario