public void CommitChanges(IAssetCache assetCache)
        {
            if (!connector.IsConnected)
            {
                Logger.Error("Not connected to VersionOne.");
            }

            try {
                var validationResult = new Dictionary <Asset, List <RequiredFieldsDto> >();
                var internalCache    = assetCache.ToInternalCache();

                var workitems = assetCache.GetWorkitems(true);

                foreach (var item in workitems)
                {
                    if (!ValidateWorkitemAndCommitOnSuccess(item, internalCache.Efforts, validationResult))
                    {
                        continue;
                    }

                    foreach (var child in item.Children)
                    {
                        ValidateWorkitemAndCommitOnSuccess(child, internalCache.Efforts, validationResult);
                    }
                }

                if (validationResult.Count > 0)
                {
                    throw new ValidatorException(requiredFieldsValidator.CreateErrorMessage(validationResult));
                }
            } catch (APIException ex) {
                Logger.Error("Failed to commit changes.", ex);
            }
        }