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

miércoles, 13 de marzo de 2019

sql

USE [Martz]
GO
/****** Objeto:  StoredProcedure [dbo].[Martz_transpaso1]    Fecha de la secuencia de comandos: 03/13/2019 16:48:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE  [dbo].[Martz_transpaso1] @Sucursal as nvarchar(50),  @Accion as nvarchar(50), @Vale as nvarchar(50)
AS
Begin
Declare @varQuery nvarchar (1000)

Select @varQuery =
       

'SELECT suc.NoParte, suc.NombreProd, cat.Categoria, suc.Unidad, LR.Precio_Venta, suc.FechaIngreso, suc.Serie, suc.Autorizo, suc.Mensajero, alm.Mercancia, suc.FecSist, suc.Usuario, suc.IdTraspaso '+
'FROM '+ @Sucursal  +' AS suc INNER JOIN '+
'dbo.CatCategoria AS cat ON suc.IdCategoria = cat.IdCategoria INNER JOIN '+
'dbo.CatAlmacen AS alm ON suc.StMercancia = alm.StMercancia INNER JOIN '+
'dbo.Lista_Refacciones AS LR ON suc.NoParte = LR.Producto '+
'WHERE   suc.NoParte <>'''''

If  @Accion <>'Buscar'
Select @varQuery =  @varQuery + ' AND IdTraspaso ='''''


Else If @Vale IS NOT  NULL
  Select @varQuery =  @varQuery + ' AND IdTraspaso =''' +@Vale +''''

 Select @varQuery =  @varQuery +' ORDER BY id DESC'
EXECUTE sp_executesql  @varQuery ;