miércoles, 20 de marzo de 2019

SIEMPRE ME PASA

lunes, 8 de febrero de 2010

Fallo del Update con Linq to Entities

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:
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!!

No hay comentarios:

Publicar un comentario