public JsonResult SaveSingleRegion(MapRegionViewModel region) { try { if (region.RegionID.HasValue == false) { return(JsonSuccess("Nothing to save!")); } var dbReg = regionRepository.First(r => r.ID == region.RegionID); var polygon = new Polygon() { Color = region.Color, FillColor = region.FillColor, FillOpacity = (decimal)region.FillOpacity, Opacity = (decimal)region.Opacity, Weight = (decimal)region.Weight }; for (int i = 0; i < region.Points.Count; ++i) { var p = region.Points[i]; polygon.PolygonPoints.Add(new PolygonPoint() { Latitude = p.Latitude, Longitude = p.Longitude, PointNumber = i }); } var oldPolygon = dbReg.Polygon; dbReg.Polygon = polygon; if (oldPolygon != null) { polygonRepository.Remove(oldPolygon); } List <int> resID = Enum.GetValues(typeof(ResourceTypeEnum)).Cast <int>().ToList(); for (int i = 0; i < region.Fertility.Count; ++i) { var res = region.Fertility[i]; var dbRes = dbReg.Resources.FirstOrDefault(x => x.ResourceTypeID == resID[i]); if (dbRes != null) { if (res == 0) { regionRepository.RemoveSpecific(dbRes); } else { dbRes.ResourceQuality = res; } } else { resourceRepository.Add(new Resource() { RegionID = dbReg.ID, ResourceTypeID = resID[i], ResourceQuality = res }); } } resourceRepository.SaveChanges(); regionRepository.SaveChanges(); return(JsonSuccess("Done")); } catch (Exception e) { return(UndefinedJsonError(e)); } }