public async Task <ResourceResult <UploadedFileResource> > UpsertAsync(UploadedFileResource resource)
        {
            var result = new ResourceResult <UploadedFileResource>();

            // Beautify before validation and make validation more succesfull
            BeautifyResource(resource);

            // save beautify effect effect
            result.Resource = resource;

            // Apply simple validation on attribute level
            ValidateAttributes(resource, result.Errors);

            // Apply complex business rules validation
            ValidateBusinessRules(resource, result.Errors);

            // Save is only usefull when error free
            if (result.Errors.Count == 0)
            {
                // Convert resource to entity
                var entity = mapper.Map <UploadedFile>(resource);

                // save entity
                await EntityContext.UpsertAsync(entity);

                // convert save result back to resource and get database created values like auto incremental field and timestamps.
                result.Resource = mapper.Map <UploadedFileResource>(entity);
            }

            return(result);
        }
        public async Task <ResourceResult <UploadedFileResource> > DeleteAsync(Int32 id)
        {
            var result = new ResourceResult <UploadedFileResource>();

            // Check if resource still exists
            result.Resource = await FindAsync(id);

            if (result.Resource != null)
            {
                // Check if delete is allowed
                ValidateDelete(result.Resource, result.Errors);

                // Delete only if allowed
                if (result.Errors.Count == 0)
                {
                    var entity = mapper.Map <UploadedFile>(result.Resource);

                    await EntityContext.DeleteAsync(entity);
                }
            }

            return(result);
        }