none
La secuencia no contiene elementos RRS feed

  • Pregunta

  • Hola un gusto en saludarlos, me encuentro con un problema en mi Web Services, actualmente estoy consumiendo un servicio y luego generando una consulta con LinQ, el detalle es que al momento de hacerla me da error antes mencionado.

    En la linea de proveedores prove = entities.proveedores.where.... acá me da error de que no contiene elementos y si le agrego el FirstOfDefault(), me da error de de ForeKey Duplicate, si hago la validación de proveedores.pro_codigo == 0, al momento de ejecutar el siguiente bloque de código: solicitud.prove.codi y los siguientes me da error de exception null...

    ¿que creen que podría ser? ¿está mal hecha la consulta a la BD?

     ServiceReferenceActATCProveedor.ZMMF_UPD_PROV_ATC_MAX_APPResponse response = client.ZMMF_UPD_PROV_ATC_MAX_APP(upd_atc);
                    response.ET_UPD_ATC_PROV.Where(res => res.RESUL == "X").ToList().ForEach(res =>
    
                    {
                       
                        proveedores prove = entities.proveedores.Where(obj => obj.pro_codigosap == res.LIFNR).First();
                        if (prove== null)
                        {
                            proveedores proveedores = new proveedores();
                            proveedores.pro_codigosap = res.LIFNR;
                            proveedores.pro_nombre = res.NAME1;
                            proveedores.pro_correo1 = res.EMAIL1;
                            proveedores.pro_correo2 = res.EMAIL2;
                            proveedores.pro_usuario = res.STCD1;
                            proveedores.pro_clave = res.STCD1;
                            proveedores.pro_tipo = true;
                            proveedores.pro_cambiarclave = true;
                            
                            prove = entities.proveedores.Add(proveedores);
                            entities.SaveChanges();
    
                        }
    
                        string ORDTRB = res.ORDTRB.TrimStart('0');
                        atc solicitud = entities.atc.Where(obj => (obj.atc_otnum == ORDTRB && obj.atc_ot_tareaotnum == res.POSIOT)).First();
                        solicitud.atc_tieneprove = true;
                        solicitud.atc_provecodi = prove.pro_codigo;
                        solicitud.atc_provecodisap = prove.pro_codigosap;
                        solicitud.atc_provenom = prove.pro_nombre;
                        solicitud.atc_provecorreo1 = prove.pro_correo1;
                        solicitud.atc_provecorreo2 = prove.pro_correo2;
                        solicitud.atc_provetipo = true;
                        
                        entities.atc.Attach(solicitud);
                        entities.Entry(solicitud).State = System.Data.EntityState.Modified;
                        entities.SaveChanges();
                        

    martes, 5 de noviembre de 2019 16:44

Todas las respuestas

  • hola

    Cuando usas esta linea

     solicitud.atc_provecodi = prove.pro_codigo;

    donde asignaste el codigo del proveedor ?

    acaso esa es la key de los proveedores y lo defines como IDENTITY para que se autoincremente solo cuando haces el INSERT

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de noviembre de 2019 17:28
  • Hola. Pon un punto de ruptura en la línea que indicas y seguro que en la propiedad entidades.proveedores tienes una lista inicalizada pero con 0 elementos. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 5 de noviembre de 2019 18:12
    Moderador
  • ese código viene implicito desde SAP, el hace un match con la matrix de sap, en dado caso que de no la encuentra, ejecuta el primer bloque de código sino hace una actualización que sería el 2do bloque de código.

    EnderLabo

    martes, 5 de noviembre de 2019 20:52
  • Si, acá está instanciada y viene null la lista.

     proveedores prove = entities.proveedores.Where(obj => obj.pro_codigosap == res.LIFNR).First();


    EnderLabo

    martes, 5 de noviembre de 2019 20:53
  • pero deben ejecutarse ambos bloques de codigo, o solo uno segun sea el caso?

    porque en cada parte haces cosas diferentes, en la primer parte creas el proveedor, en la segunda actualizas la solicitud

    pero debes asegurar que se genere un codigo de proveedor valido cuando insertas, por eso preguntaba si este campo se autoincrementa, porque no veo que lo asignes al crear el proveedor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de noviembre de 2019 20:55
  • No, no es autoincrementable, en la primera parte es donde se hace el insert y en la 2da se actualiza dependiendo del caso, pero tengo problemas con el insert, apenas pruebo el ws, siempre inserta, no me actualiza la lista, se queda null y por ende entra al bloque de insert y ahí tengo el problema con el duplicado (ya la data existe en la matrix de Sap y en Sql) así que debería es de actualizar y no de hacer siempre un INSERT.

    EnderLabo

    martes, 5 de noviembre de 2019 22:55
  • Si, acá está instanciada y viene null la lista.

     proveedores prove = entities.proveedores.Where(obj => obj.pro_codigosap == res.LIFNR).First();


    EnderLabo

    Hola. Ese es el problema. entities.proveedores viene entonces a null o incluso una lista de 0 elementos? Deberías realizar comprobación de ese caso, para evitar la excepción excepción 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 5 de noviembre de 2019 23:39
    Moderador