コード例 #1
0
        /// <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);
        }