protected async Task <IActionResult> UpdateAsync(UpdateArguments <TEntity> arguments)
        {
            var query = this.context.Set <TEntity>()
                        .AsTracking();

            if (this.DefaultPredicate != null)
            {
                query = query.Where(this.DefaultPredicate);
            }

            if (typeof(DAL.IHasSoftDelete).IsAssignableFrom(typeof(TEntity)))
            {
                query = query.Cast <DAL.IHasSoftDelete>().Where(x => !x.IsDeleted).Cast <TEntity>();
            }

            if (arguments.Predicate != null)
            {
                query = query.Where(arguments.Predicate);
            }

            var entity = await query.SingleOrDefaultAsync();

            if (entity == null)
            {
                return(this.NotFound());
            }

            arguments.UpdateAction?.Invoke(entity);

            await this.context.SaveChangesAsync();

            return(await arguments.GetAction(entity.Id));
        }