// POST: api/Core.svc/Jobs
        public async Task<IHttpActionResult> Post(Job job)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn = String.Format("{0}:{1}",
                declaringType.Namespace,
                declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("Job to be created has invalid ModelState.");
                return BadRequest(ModelState);
            }
            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanCreate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return StatusCode(HttpStatusCode.Forbidden);
                }
                if (null == job)
                {
                    var errorMsg = "Job to be created contains invalid data.";
                    Debug.WriteLine(errorMsg);
                    return BadRequest(errorMsg);
                }
                Debug.WriteLine("Saving new job...");

                var jobEntity = new Job()
                {
                    Created = DateTimeOffset.Now,
                    CreatedBy = identity.Username,
                    Tid = identity.Tid,
                    Type = null == job.Type ? "Default" : job.Type,
                    State = job.State,
                    Parameters = job.Parameters,
                    ReferencedItemId = job.ReferencedItemId,
                    Token = job.Token,
                    TenantId = job.TenantId
                };
                jobEntity = db.Jobs.Add(jobEntity);
                db.SaveChanges();
                Debug.WriteLine("Saved job with id '{0}'", jobEntity.Id);
                return ResponseMessage(ODataControllerHelper.ResponseCreated(this, jobEntity));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
        // PUT: api/Core.svc/Jobs(5)
        public async Task<IHttpActionResult> Put([FromODataUri] int key, Job job)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn = String.Format("{0}:{1}",
                declaringType.Namespace,
                declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("Job to be updated with id '{0}' has invalid ModelState.", key);
                return BadRequest(ModelState);
            }

            if (key != job.Id)
            {
                return BadRequest();
            }

            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanUpdate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return StatusCode(HttpStatusCode.Forbidden);
                }
                var original = db.Jobs.Find(job.Id);
                if (null == original)
                {
                    return StatusCode(HttpStatusCode.NotFound);
                }
                if (!CurrentUserDataProvider.IsEntityOfUser(identity.Username, identity.Tid, original))
                {
                    return StatusCode(HttpStatusCode.Forbidden);
                }
                job.Created = original.Created;
                job.CreatedBy = original.CreatedBy;
                job.Modified = DateTimeOffset.Now;
                job.ModifiedBy = identity.Username;
                job.Tid = original.Tid;
                db.Jobs.Attach(job);
                db.Entry(job).State = EntityState.Modified;
                db.SaveChanges();
                Debug.WriteLine("Job with id '{0}' updated", key);
                return Ok<Job>(job);
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }