//https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.1
        public ActionResult Update(Guid id, [FromBody] EditChecklistRequest request)
        {
            var checklistInDb = _context.Checklists
                                .Include(ci => ci.ChecklistChecklistItems)
                                .ThenInclude(cci => cci.ChecklistItem)
                                .SingleOrDefault(c => c.Id == id);

            if (checklistInDb == null)
            {
                return(NotFound());
            }
            else
            {
                checklistInDb.Name = request.Checklist.Name;

                IList <Models.Inspections.ChecklistItem> selectedItems = new List <Models.Inspections.ChecklistItem>();
                // Using plain for loop for parallel array data reference
                for (var i = 0; i < request.IsChecklistItemSelected.Count; i++)
                {
                    if (request.IsChecklistItemSelected[i])
                    {
                        Guid selectedItemId = request.ChecklistItems[i].Id;
                        selectedItems.Add(_context.ChecklistItems.Single(ci => ci.Id == selectedItemId));
                    }
                }
                foreach (var item in checklistInDb.ChecklistChecklistItems.Select(joinItem => joinItem.ChecklistItem))
                {
                    _context.ChecklistItems.Attach(item);
                }
                checklistInDb.ChecklistChecklistItems = selectedItems.Select(ci => new ChecklistChecklistItem
                {
                    Checklist       = checklistInDb,
                    ChecklistId     = checklistInDb.Id,
                    ChecklistItem   = ci,
                    ChecklistItemId = ci.Id
                }).ToList();

                _context.SaveChanges();
                return(NoContent());
            }
        }
        public ActionResult <EditChecklistRequest> EditById(Guid id)
        {
            var checklist = _context.Checklists
                            .Include(c => c.ChecklistChecklistItems)
                            .SingleOrDefault(c => c.Id == id);

            if (checklist == null)
            {
                return(NotFound());
            }

            IList <Models.Inspections.ChecklistItem> checklistItems = _context.ChecklistItems.OrderBy(c => c.Name).ToList();
            IList <bool> isChecklistItemSelected = checklistItems.Select(ci => checklist.ChecklistChecklistItems.Any(cci => cci.ChecklistItemId == ci.Id)).ToList();

            var viewModel = new EditChecklistRequest
            {
                Checklist               = Mapper.Map <ChecklistSummary>(checklist),
                ChecklistItems          = Mapper.Map <IList <Models.Web.Checklists.ChecklistItem> >(checklistItems),
                IsChecklistItemSelected = isChecklistItemSelected
            };

            return(Json(viewModel));
        }