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)); }