/// <summary> /// Updates the one singer by identifier. /// </summary> /// <returns>Return the error code</returns> /// <param name="id">Identifier.</param> /// <param name="singer">Singer.</param> public async Task <int> UpdateOneSingerById(int id, Singer singer) { int result = ErrorCodeModel.ErrorBecauseBugs; if (id == 0) { // its a bug, id of singer cannot be 0 result = ErrorCodeModel.ErrorBecauseBugs; return(result); } if (singer == null) { // the data for updating is empty result = ErrorCodeModel.SingerIsNull; return(result); } if (string.IsNullOrEmpty(singer.SingNo)) { // the singer no that input by user is empty result = ErrorCodeModel.SingerNoIsEmpty; return(result); } Singer newSinger = await FindOneSingerBySingNo(singer.SingNo); if (newSinger != null) { if (newSinger.Id != id) { // singer no is duplicate result = ErrorCodeModel.SingerNoDuplicate; return(result); } } Singer orgSinger = await FindOneSingerById(id); if (orgSinger == null) { // the original singer does not exist any more result = ErrorCodeModel.OriginalSingerNotExist; return(result); } else { orgSinger.CopyColumnsFrom(singer); // verifying the validation for Singer data int validCode = await VerifySinger(orgSinger); if (validCode != ErrorCodeModel.Succeeded) { // data is invalid result = validCode; return(result); } // check if entry state changed if ((_context.Entry(orgSinger).State) == EntityState.Modified) { using (var dbTransaction = _context.Database.BeginTransaction()) { try { await _context.SaveChangesAsync(); dbTransaction.Commit(); result = ErrorCodeModel.Succeeded; // succeeded to update } catch (DbUpdateException ex) { string msg = ex.ToString(); Console.WriteLine("Failed to update singer table: \n" + msg); dbTransaction.Rollback(); result = ErrorCodeModel.DatabaseError; } } } else { result = ErrorCodeModel.SingerNotChanged; // no changed } } return(result); }