public Task <Result <Models.Responses.ManagerContext> > Modify(Models.Requests.Manager managerRequest)
        {
            return(_managerContext.GetManager()
                   .Check(manager => ValidateRequest(managerRequest))
                   .Bind(Update)
                   .Map(Build));


            async Task <Result <Common.Models.ManagerContext> > Update(Common.Models.Manager manager)
            {
                manager.FirstName = managerRequest.FirstName;
                manager.LastName  = managerRequest.LastName;
                manager.Title     = managerRequest.Title;
                manager.Position  = managerRequest.Position;
                manager.Phone     = managerRequest.Phone;
                manager.Fax       = managerRequest.Fax;
                manager.Updated   = _dateTimeProvider.UtcNow();

                var entry = _dbContext.Managers.Update(manager);
                await _dbContext.SaveChangesAsync();

                _dbContext.DetachEntry(entry.Entity);

                var managerRelation = await _managerContext.GetManagerRelation();

                if (managerRelation.IsFailure)
                {
                    return(Result.Failure <Common.Models.ManagerContext>(managerRelation.Error));
                }

                return(CollectManagerContext(manager, managerRelation.Value));
            }
        }
 private Result ValidateRequest(Models.Requests.Manager managerRequest)
 => ValidationHelper.Validate(managerRequest, new ManagerValidator());