/// <summary>
 /// Actualiza un Banner de la base de datos
 /// </summary>
 /// <param name="pBanner">Banner a actualizar de la base de datos</param>
 public virtual void Update(Banner pBanner)
 {
     using (UnitOfWork pUnitOfWork = new UnitOfWork())
     {
         Banner databaseBanner = this.GetByCodigo(pBanner.Codigo);
         pUnitOfWork.BannerRepository.Update(databaseBanner);
         pUnitOfWork.BannerRepository.ChangeValues(databaseBanner, pBanner);
         //Rangos Fecha
         List <RangoFecha> rangosFechaEliminados  = ExtesionLista.GetDeleted <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha);
         List <RangoFecha> rangosFechaModificados = ExtesionLista.GetModified <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha);
         List <RangoFecha> rangosFechaAInsertar   = ExtesionLista.GetNew <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha);
         foreach (RangoFecha pRangoFecha in rangosFechaEliminados)
         {
             pRangoFecha.Principal = null;
             pUnitOfWork.RangoFechaRepository.DeleteWithRelated(pRangoFecha);
         }
         foreach (RangoFecha pRangoFecha in rangosFechaAInsertar)
         {
             pRangoFecha.Principal = null;
             pUnitOfWork.RangoFechaRepository.Insert(pRangoFecha);
         }
         foreach (RangoFecha pRangoFecha in rangosFechaModificados)
         {
             //Actualizar Rango Fecha
             RangoFecha rangoFechaOriginal = databaseBanner.RangosFecha.Find(x => x.Equals(pRangoFecha));
             pUnitOfWork.RangoFechaRepository.ChangeValues(rangoFechaOriginal, pRangoFecha);
             //Rangos Horarios
             List <RangoHorario> rangosHorariosAInsertar = pRangoFecha.RangosHorario;
             for (int i = rangoFechaOriginal.RangosHorario.Count - 1; i >= 0; i--)
             {
                 pUnitOfWork.RangoHorarioRepository.Delete(rangoFechaOriginal.RangosHorario[i]);
             }
             foreach (RangoHorario pRangoHorario in rangosHorariosAInsertar)
             {
                 pRangoHorario.RangoFecha = null;
                 pUnitOfWork.RangoHorarioRepository.Insert(pRangoHorario);
             }
         }
         pUnitOfWork.Save();
     }
 }
 /// <summary>
 /// Actualiza una Campaña de la base de datos
 /// </summary>
 /// <param name="pCampaña">Campaña a actualizar</param>
 public virtual void Update(Campaña pCampaña)
 {
     using (UnitOfWork pUnitOfWork = new UnitOfWork())
     {
         Campaña databaseCampaña = this.GetByCodigo(pCampaña.Codigo);
         pUnitOfWork.CampañaRepository.Update(databaseCampaña);
         pUnitOfWork.CampañaRepository.ChangeValues(databaseCampaña, pCampaña);
         //Imágenes
         List <Imagen> imagenesEliminadas  = ExtesionLista.GetDeleted <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes);
         List <Imagen> imagenesModificadas = ExtesionLista.GetModified <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes);
         List <Imagen> imagenesAInsertar   = ExtesionLista.GetNew <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes);
         foreach (Imagen pImagen in imagenesModificadas)
         {
             Imagen imagenOriginal = databaseCampaña.Imagenes.Find(x => x.Equals(pImagen));
             pUnitOfWork.ImagenRepository.ChangeValues(imagenOriginal, pImagen);
         }
         foreach (Imagen pImagen in imagenesEliminadas)
         {
             //Para que no lance excepción
             pImagen.Campaña = null;
             pUnitOfWork.ImagenRepository.DeleteWithRelated(pImagen);
         }
         foreach (Imagen pImagen in imagenesAInsertar)
         {
             //Para que no cree otra campaña
             pImagen.Campaña = null;
             pUnitOfWork.ImagenRepository.Insert(pImagen);
         }
         //Rangos Fecha
         List <RangoFecha> rangosFechaEliminados  = ExtesionLista.GetDeleted <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha);
         List <RangoFecha> rangosFechaModificados = ExtesionLista.GetModified <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha);
         List <RangoFecha> rangosFechaAInsertar   = ExtesionLista.GetNew <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha);
         foreach (RangoFecha pRangoFecha in rangosFechaEliminados)
         {
             pRangoFecha.Principal = null;
             pUnitOfWork.RangoFechaRepository.DeleteWithRelated(pRangoFecha);
         }
         foreach (RangoFecha pRangoFecha in rangosFechaAInsertar)
         {
             pRangoFecha.Principal = null;
             pUnitOfWork.RangoFechaRepository.Insert(pRangoFecha);
         }
         foreach (RangoFecha pRangoFecha in rangosFechaModificados)
         {
             //Actualizar Rango Fecha
             RangoFecha rangoFechaOriginal = databaseCampaña.RangosFecha.Find(x => x.Equals(pRangoFecha));
             pUnitOfWork.RangoFechaRepository.ChangeValues(rangoFechaOriginal, pRangoFecha);
             //Rangos Horarios
             List <RangoHorario> rangosHorariosAInsertar = pRangoFecha.RangosHorario;
             for (int i = rangoFechaOriginal.RangosHorario.Count - 1; i >= 0; i--)
             {
                 pUnitOfWork.RangoHorarioRepository.Delete(rangoFechaOriginal.RangosHorario[i]);
             }
             foreach (RangoHorario pRangoHorario in rangosHorariosAInsertar)
             {
                 pRangoHorario.RangoFecha = null;
                 pUnitOfWork.RangoHorarioRepository.Insert(pRangoHorario);
             }
         }
         pUnitOfWork.Save();
     }
 }