none
Insertar multiples registros con entity framework RRS feed

  • Pregunta

  • Hola lo que pasa esque tengo un cheklistbox que me despliega N valores y puedo seleccionar los que yo desee pero al guardar el me debe de guardar en una tabla uno por uno este es el codigo que poseo

            public ActionResult Create([Bind(Include="IdFinanzasSocioEstrategico,IdSocioEstrategico,IdCuentaAsociada,IdCondicionPago,IdMedioPago,IdBanco")] GPSocio_Estrategico_Finanzas gpsocio_estrategico_finanzas)
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        db.GPSocio_Estrategico_Finanzas.Add(gpsocio_estrategico_finanzas);
                        GPSocio_Estrategico_Impuestos gfimp = new GPSocio_Estrategico_Impuestos();
                        int idimpuestomax = (from c in db1.GPSocio_Estrategico_Impuestos
                                             select c.IdImpuestoSocioEstrategico).Count();
                        var seleccion = ListBoxExtension.GetSelectedValues<int>("Impuestos");//aqui capturo los valores del checkboxlist 
                        foreach (var item in seleccion)
                        {
    
                            gfimp.IdImpuestoSocioEstrategico = idimpuestomax;
                            gfimp.IdSocioEstrategico = gpsocio_estrategico_finanzas.IdSocioEstrategico;
                            gfimp.IdImpuesto = item;
                            db1.GPSocio_Estrategico_Impuestos.Add(gfimp);//aqui la seguda vez me saca error 
    db1.SaveChanges();
                            idimpuestomax++;
                        }
                        
                        //gfimp.IdImpuestoSocioEstrategico =1
                        //foreach()
                        db.SaveChanges();
                        HttpContext.Application["NombreTb"] = gpsocio_estrategico_finanzas.IdFinanzasSocioEstrategico;
                        return RedirectToAction("Details");
                    }
                    catch (Exception e)
                    {
                        ViewData["EditError"] = e.Message;
                    }
                }


    y este es el error que me aparece 

    The property 'Id' is part of the object's key information and cannot be modified.

    de antemano mucha gracias por la ayuda

    viernes, 12 de septiembre de 2014 19:36

Respuestas

  • hola

    porque tienes un db y un db1? el contexto que uses deberia ser el mismo

    el id de las tablas no es identity? porque sino deberias seleccionar el id de la entidad existente y no poner un incremental sumando una variable

    int idimpuestomax = (from c in db1.GPSocio_Estrategico_Impuestos
    					 select c.IdImpuestoSocioEstrategico).Count();
    var seleccion = ListBoxExtension.GetSelectedValues<int>("Impuestos");
    foreach (var item in seleccion)
    {
    
    	GPSocio_Estrategico_Impuestos gfimp = new GPSocio_Estrategico_Impuestos();
    	gfimp.IdImpuestoSocioEstrategico = idimpuestomax;
    	gfimp.IdSocioEstrategico = gpsocio_estrategico_finanzas.IdSocioEstrategico;
    	gfimp.IdImpuesto = item;
    	db.GPSocio_Estrategico_Impuestos.Add(gfimp);
    
    	idimpuestomax++;
    }

    la instancia deberias ponerla dentro del foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Alexis cano sábado, 13 de septiembre de 2014 0:37
    viernes, 12 de septiembre de 2014 23:34

Todas las respuestas

  • hola

    porque tienes un db y un db1? el contexto que uses deberia ser el mismo

    el id de las tablas no es identity? porque sino deberias seleccionar el id de la entidad existente y no poner un incremental sumando una variable

    int idimpuestomax = (from c in db1.GPSocio_Estrategico_Impuestos
    					 select c.IdImpuestoSocioEstrategico).Count();
    var seleccion = ListBoxExtension.GetSelectedValues<int>("Impuestos");
    foreach (var item in seleccion)
    {
    
    	GPSocio_Estrategico_Impuestos gfimp = new GPSocio_Estrategico_Impuestos();
    	gfimp.IdImpuestoSocioEstrategico = idimpuestomax;
    	gfimp.IdSocioEstrategico = gpsocio_estrategico_finanzas.IdSocioEstrategico;
    	gfimp.IdImpuesto = item;
    	db.GPSocio_Estrategico_Impuestos.Add(gfimp);
    
    	idimpuestomax++;
    }

    la instancia deberias ponerla dentro del foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Alexis cano sábado, 13 de septiembre de 2014 0:37
    viernes, 12 de septiembre de 2014 23:34
  • Hola amigo si muchas gracias ese era el problema poner la instancia dentro del foreach muchas gracias 

    Alexis Cano

    sábado, 13 de septiembre de 2014 0:37