internal static async Task <TEntity[]> UpdateEntities <TEntity>(this IBulkRequest request,
                                                                        ICrudRequestConfig config,
                                                                        IEnumerable <Tuple <object, TEntity> > items,
                                                                        CancellationToken token)
            where TEntity : class
        {
            var updator = config.GetUpdatorFor <TEntity>();

            try
            {
                var entities = await Task.WhenAll(items.Select(x => updator(request, x.Item1, x.Item2, token))).Configure();

                token.ThrowIfCancellationRequested();

                return(entities);
            }
            catch (Exception e) when(IsNonCancellationFailure(e))
            {
                throw new CrudUpdateEntityFailedException(GenericUpdateEntityError, e)
                      {
                          ItemProperty   = items.Select(x => x.Item1).ToArray(),
                          EntityProperty = items.Select(x => x.Item2).ToArray()
                      };
            }
        }
        internal static async Task <TEntity> UpdateEntity <TEntity>(this ICrudRequest request,
                                                                    ICrudRequestConfig config,
                                                                    object item,
                                                                    TEntity entity,
                                                                    CancellationToken token)
            where TEntity : class
        {
            var updator = config.GetUpdatorFor <TEntity>();

            try
            {
                entity = await updator(request, item, entity, token).Configure();

                token.ThrowIfCancellationRequested();

                return(entity);
            }
            catch (Exception e) when(IsNonCancellationFailure(e))
            {
                throw new CrudUpdateEntityFailedException(GenericUpdateEntityError, e)
                      {
                          ItemProperty   = item,
                          EntityProperty = entity
                      };
            }
        }