public ActionResult Create(Ubication ubication, string[] urls, int[] ubicationFeatures, string CantonId, string outstandingPicture)
        {
            if (ubication.Name != null && ubication.DistritId > 0 && ubicationFeatures.Length > 0)
            {
                using (var transaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        db.Ubications.Add(ubication);
                        db.SaveChanges();

                        List <UbicationPicture>          Pictures = new List <UbicationPicture>();
                        List <UbicationFeatureUbication> Features = new List <UbicationFeatureUbication>();
                        UbicationPicture picture = new UbicationPicture();

                        if (outstandingPicture != null)
                        {
                            picture.OutstandingPicture = true;
                            picture.Extension          = AddBlobToStorage(ubication.UbicationId, outstandingPicture);
                            picture.UbicationId        = ubication.UbicationId;
                            Pictures.Add(picture);
                        }

                        if (urls != null)
                        {
                            foreach (var url in urls)
                            {
                                picture = new UbicationPicture();
                                picture.OutstandingPicture = false;
                                picture.Extension          = AddBlobToStorage(ubication.UbicationId, url);
                                picture.UbicationId        = ubication.UbicationId;
                                Pictures.Add(picture);
                            }
                        }


                        foreach (var feature in ubicationFeatures)
                        {
                            UbicationFeatureUbication ubicationFeature = new UbicationFeatureUbication();
                            ubicationFeature.UbicationFeatureId = feature;
                            ubicationFeature.UbicationId        = ubication.UbicationId;
                            Features.Add(ubicationFeature);
                        }

                        db.UbicationPictures.AddRange(Pictures);
                        db.UbicationFeaturesUbication.AddRange(Features);
                        db.SaveChanges();

                        transaction.Commit();
                        return(RedirectToAction("Index"));
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        ViewBag.Error = ex.Message;
                        return(View(ubication));
                    }
                }
            }

            return(View(ubication));
        }
        public ActionResult Edit([Bind(Include = "UbicationId,Description,Name,DistritId,UbicationCategoryId")] Ubication ubication, string[] urls, int[] ubicationFeatures, string CantonId, string outstandingPicture)
        {
            if (ubication.Name != null && ubication.DistritId > 0 && ubicationFeatures.Length > 0)
            {
                using (var transaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        db.Entry(ubication).State = EntityState.Modified;
                        db.SaveChanges();


                        //---------------Pictures section---------------//
                        if (urls != null)
                        {
                            UbicationPicture        ubicationPicture  = new UbicationPicture();
                            List <UbicationPicture> ubicationPictures = new List <UbicationPicture>();

                            IQueryable <UbicationPicture> currentPicturesEF = from p in db.UbicationPictures
                                                                              where p.UbicationId == ubication.UbicationId
                                                                              select p;

                            //Tenemos la lista de fotos actuales y la foto de portada actual en formato de byte.
                            List <UbicationPicture> currentPicturesList       = currentPicturesEF.ToList();
                            UbicationPicture        currentOutstandingPicture = currentPicturesList.Find(p => p.OutstandingPicture == true);
                            if (outstandingPicture != null)
                            {
                                SetOutstandingPicture(currentOutstandingPicture, currentPicturesList, outstandingPicture, ubication.UbicationId);
                            }

                            var i = 0;
                            foreach (var url in urls)
                            {
                                if (!currentPicturesList.Exists(x => x.Extension == url))
                                {
                                    ubicationPicture = new UbicationPicture();
                                    ubicationPicture.OutstandingPicture = false;
                                    ubicationPicture.Extension          = AddBlobToStorage(ubication.UbicationId, url, i);
                                    ubicationPicture.UbicationId        = ubication.UbicationId;
                                    ubicationPictures.Add(ubicationPicture);
                                }
                                i++;
                            }

                            db.UbicationPictures.AddRange(ubicationPictures);
                            db.SaveChanges();
                        }
                        //---------------End pictures section---------------//


                        //---------------Features section---------------//

                        IQueryable <UbicationFeatureUbication> currentFeatures = from f in db.UbicationFeaturesUbication
                                                                                 where f.UbicationId == ubication.UbicationId
                                                                                 select f;
                        List <UbicationFeatureUbication> currentFeaturesList = currentFeatures.ToList();

                        foreach (var currentFeature in currentFeaturesList)
                        {
                            var NoExists = true;
                            foreach (var feature in ubicationFeatures)
                            {
                                if (currentFeature.UbicationFeatureId == feature)
                                {
                                    NoExists = false;
                                }
                            }

                            if (NoExists)
                            {
                                db.UbicationFeaturesUbication.Remove(currentFeature);
                            }
                        }

                        List <UbicationFeatureUbication> ubicationFeaturesToAdd = new List <UbicationFeatureUbication>();

                        foreach (var feature in ubicationFeatures)
                        {
                            var Exists = false;
                            foreach (var currentFeature in currentFeaturesList)
                            {
                                if (currentFeature.UbicationFeatureId == feature)
                                {
                                    Exists = true;
                                }
                            }

                            if (!Exists)
                            {
                                UbicationFeatureUbication ubicationFeatureUbication = new UbicationFeatureUbication();
                                ubicationFeatureUbication.UbicationFeatureId = feature;
                                ubicationFeatureUbication.UbicationId        = ubication.UbicationId;
                                ubicationFeaturesToAdd.Add(ubicationFeatureUbication);
                            }
                        }
                        db.UbicationFeaturesUbication.AddRange(ubicationFeaturesToAdd);
                        db.SaveChanges();
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }

            reloadViewBags(urls.ToList(), ubicationFeatures.ToList(), outstandingPicture, CantonId, ubication);
            return(View(ubication));
        }