public async Task <IHttpActionResult> Post(PosStaffModel newPosStaff) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (newPosStaff.UserName == null) { logger.Info("'UserName' is null from post request"); return(BadRequest("'UserName' should not be null")); } if (dbContext.PosStaffModels.FirstOrDefault(f => f.UserName == newPosStaff.UserName) != null) { logger.Info("Duplicate Name: " + newPosStaff.UserName); return(Conflict()); } dbContext.PosStaffModels.Add(newPosStaff); try { await dbContext.SaveChangesAsync(); } catch (DbUpdateException ex) { var _ = ex.InnerException as UpdateException; var sqlException = _?.InnerException as SqlException; if (sqlException != null && sqlException.Errors.OfType <SqlError>() .Any(se => se.Number == 2601 || se.Number == 2627 /* PK/UKC violation */)) { // quite sure it's the duplicate key exception, no need to cancel. logger.Error( "Duplicate key inserting was detected, will respond with 'HttpStatusCode.Conflict', the posted detail: " + newPosStaff); return(StatusCode(HttpStatusCode.Conflict)); } // it's something else... throw; } return(Ok(newPosStaff)); }
/// <summary> /// update target People /// </summary> /// <param name="id">target people id</param> /// <param name="updateStaff">replace with this entity</param> /// <returns>succeed or not.</returns> public async Task <IHttpActionResult> Put(int id, PosStaffModel updateStaff) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != updateStaff.Id) { return(BadRequest("Unmatched id between url parameter and posted entity")); } //if (updateStaff.Detail.Id == 0) //{ // dbContext.Entry(updateStaff.Detail).State = EntityState.Added; //} //else //{ // dbContext.Entry(updateStaff.Detail).State = EntityState.Modified; //} dbContext.Entry(updateStaff).State = EntityState.Modified; try { await dbContext.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { // someone else is updating concurrently. } catch (Exception exx) { return(StatusCode(HttpStatusCode.NotAcceptable)); } return(StatusCode(HttpStatusCode.NoContent)); }