private async Task <IHttpActionResult> PutAsync(TEntity entity, Func <TEntity, Task <TEntity> > lambda)
        {
            return(await ActionHelper.TryCatchWithLoggerAsync(async() =>
            {
                if (!_service.Queryable().Any(f => f.UniqueId == entity.UniqueId))
                {
                    return NotFound();
                }

                _unitOfWork.BeginTransaction();
                if (entity is IWorkflowContentBase)
                {
                    IWorkflowContentBase workflow = (IWorkflowContentBase)entity;
                    WorkflowActions = workflow.WorkflowActions ?? new List <IWorkflowAction>();
                    WorkflowName = workflow.WorkflowName;
                    IdWorkflowActivity = workflow.IdWorkflowActivity;
                    WorkflowAutoComplete = workflow.WorkflowAutoComplete;
                }
                entity = await lambda(entity);
                bool result = await _unitOfWork.SaveAsync();

                if (result)
                {
                    AfterSave(entity);
                    return Ok(entity);
                }
                return InternalServerError();
            }, BadRequest, Content, InternalServerError, _logger, LogCategories));
        }
        private async Task <IHttpActionResult> DeleteAsync([FromBody] TEntity entity, Func <TEntity, Task <bool> > lambda)
        {
            return(await ActionHelper.TryCatchWithLoggerAsync(async() =>
            {
                TEntity entityToDelete = (SetEntityIncludeOnDelete(_unitOfWork.Repository <TEntity>().Query(f => f.UniqueId == entity.UniqueId, true)).SelectAsQueryable()).SingleOrDefault();
                if (entityToDelete == null)
                {
                    return NotFound();
                }

                _unitOfWork.BeginTransaction();
                if (entity is IWorkflowContentBase)
                {
                    IWorkflowContentBase workflow = (IWorkflowContentBase)entity;
                    WorkflowActions = workflow.WorkflowActions ?? new List <IWorkflowAction>();
                    WorkflowName = workflow.WorkflowName;
                    IdWorkflowActivity = workflow.IdWorkflowActivity;
                    WorkflowAutoComplete = workflow.WorkflowAutoComplete;
                }
                await lambda(entity);
                await _unitOfWork.SaveAsync();
                AfterSave(entityToDelete);

                return Ok(entity);
            }, BadRequest, Content, InternalServerError, _logger, LogCategories));
        }
        private async Task <IHttpActionResult> PostAsync(TEntity entity, Func <TEntity, Task <TEntity> > lambda)
        {
            return(await ActionHelper.TryCatchWithLoggerAsync(async() =>
            {
                _unitOfWork.BeginTransaction(PostIsolationLevel);
                if (entity is IWorkflowContentBase)
                {
                    IWorkflowContentBase workflow = (IWorkflowContentBase)entity;
                    WorkflowActions = workflow.WorkflowActions ?? new List <IWorkflowAction>();
                    WorkflowName = workflow.WorkflowName;
                    IdWorkflowActivity = workflow.IdWorkflowActivity;
                    WorkflowAutoComplete = workflow.WorkflowAutoComplete;
                }
                entity = await lambda(entity);
                bool result = await _unitOfWork.SaveAsync();

                if (result)
                {
                    AfterSave(entity);
                    return Ok(entity);
                }
                return InternalServerError();
            }, BadRequest, Content, InternalServerError, _logger, LogCategories));
        }