none
actualizar tabla hija EF C# RRS feed

  • Pregunta

  • Hola quisiera saber como puedo hacer para actualizar una tabla "detalle" con EF , es decir si yo tengo un pedido con 3 detalles cargados como puedo hacer con EF para que al actualizar, por ejemplo (quito una linea) me borre ese detalle y deje el pedido con 2 lineas nomas. Yo tenia resuelto el update para que me reemplace los valores pero resulta que para el caso de remover alguno EF no me lo quita en la BD

    Se me ocurrió de plantearlo asi: no se que tan mala performance pueda tener..
    Lo que no me gusta de esta solución es que va a realizar varios inserts incluso para los items que ya estaban cargados en la BD y por otro lado varios delete para aquellos items que fueron quitados por el usuario, pero no se me ocurrió otra forma de hacerlo

    //fragmento de código del metodo modificar..

    //El objeto receta lo recibo por parametro en el metodo modificar..

                                

    Recetas r = (from R in db.Recetas.Include(x=>x.DetallesReceta) where R.idReceta == receta.idReceta select R).FirstOrDefault();
                        if(r!=null)
                        {
                            r.idProducto = receta.idProducto;
                            r.descripcion = receta.descripcion;
                            var ingredientes = receta.DetallesReceta.ToList();
                            var ingredientesviejos = r.DetallesReceta.ToList();//ESTOS YA LOS TENIGO EN LA BD
                            //de la lista de ingredientes viejos solo me quedo con los que voy a eliminar
                            List<DetallesReceta> ingredientes_deleted = ingredientesviejos.Except(ingredientes).ToList();
                            foreach(var item in ingredientes_deleted)
                            {
    //Elimino todos los ingredientes que ya no tengo en mi objeto receta
                                db.DetallesReceta.Remove(item);
                            }
                            foreach(var ingrediente in receta.DetallesReceta)
                            {
    //ahora agrego todos mis ingredientes denuevo
                                ingrediente.idReceta = receta.idReceta;
                                r.DetallesReceta.Add(ingrediente);                          
                            }
                            db.SaveChanges();
                            return true;
                        }

     

    hay alguna otra solución o algo que sea más óptimo??

    Adjunto estructura de las tablas para ser más claro:

    Tabla padre: receta            Tabla hija detalleReceta                                Relacion 1 a muchos

    idreceta PK                          idDetalleReceta PK not null autoincrement
                                                idReceta FK
                                                idProducto FK     

    saludos



    • Editado Artemis Spectrum viernes, 12 de julio de 2019 0:40 adjunto código nuevo
    jueves, 11 de julio de 2019 23:23