protected virtual async Task CreateAsync(CreateOrUpdateMenuItemInput input)
        {
            MenuItem menuItem = _mapper.Map <MenuItem>(input.MenuItem);

            if (input.MenuItem.ParentId.HasValue)
            {
                menuItem.Parent = _menuItemRepository.FirstOrDefault(m => m.Id == input.MenuItem.ParentId);
            }
            await _menuItemRepository.InsertAsync(menuItem);
        }
 public async Task CreateOrEditAsync(CreateOrUpdateMenuItemInput input)
 {
     if (input.MenuItem.Id.HasValue)
     {
         await UpdateAsync(input);
     }
     else
     {
         await CreateAsync(input);
     }
 }
        private async Task UpdateAsync(CreateOrUpdateMenuItemInput input)
        {
            Debug.Assert(input.MenuItem.Id != null, "input.MenuItem.Id != null");
            MenuItem menuItem = await _menuItemRepository.GetAsync(input.MenuItem.Id.Value);

            menuItem = _mapper.Map(input.MenuItem, menuItem);
            if (input.MenuItem.ParentId.HasValue && menuItem.Parent?.Id != input.MenuItem.ParentId)
            {
                menuItem.Parent = _menuItemRepository.FirstOrDefault(m => m.Id == input.MenuItem.ParentId.Value);
            }

            await _menuItemRepository.UpdateAsync(menuItem);
        }