public async Task <ActionResult> CustomFieldUpdate(MetaField metaField, List <int> Categories)
        {
            if (metaField.ID == 0)
            {
                metaField.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added;

                _customFieldService.Insert(metaField);
            }
            else
            {
                var metaFieldExistingQuery = await _customFieldService.Query(x => x.ID == metaField.ID).Include(x => x.MetaCategories).SelectAsync();

                var metaFieldExisting = metaFieldExistingQuery.FirstOrDefault();

                metaFieldExisting.Name          = metaField.Name;
                metaFieldExisting.ControlTypeID = metaField.ControlTypeID;
                metaFieldExisting.Options       = metaField.Options;
                metaFieldExisting.Required      = metaField.Required;
                metaFieldExisting.Searchable    = metaField.Searchable;

                metaFieldExisting.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified;

                _customFieldService.Update(metaFieldExisting);

                // Delete existing
                foreach (var category in metaFieldExisting.MetaCategories)
                {
                    await _customFieldCategoryService.DeleteAsync(category.ID);
                }
            }

            if (Categories != null)
            {
                // Insert meta categories
                var metaCategories = Categories.Select(x => new MetaCategory()
                {
                    CategoryID  = x,
                    FieldID     = metaField.ID,
                    ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added
                }).ToList();

                _customFieldCategoryService.InsertRange(metaCategories);
            }

            await _unitOfWorkAsync.SaveChangesAsync();

            return(RedirectToAction("CustomFields"));
        }