public async Task <IActionResult> Create([Bind("Id,FromAccountId, FromAccount, ToAccountId, ToAccount,TransactionDate,TransactionAmount,FromBalance,ToBalance")] Transaction transaction) { if (ModelState.IsValid) { try { var transferAmount = transaction.TransactionAmount; var fromAcct = GetAccount(transaction.FromAccountId); if (fromAcct.Balance < transferAmount) { TempData["ErrorMessage"] = "Transfer amount cannot be greater than available balance. Please select a different amount."; return(RedirectToAction(nameof(Create))); } var toAcct = GetAccount(transaction.ToAccountId); if (fromAcct.Id == toAcct.Id) { TempData["ErrorMessage"] = "You cannot transfer to the same account. Please choose another account"; return(RedirectToAction(nameof(Create))); } transaction.FromAccount = fromAcct.Name; transaction.ToAccount = toAcct.Name; transaction.TransactionDate = DateTime.Now; transaction.FromBalance = fromAcct.Balance; transaction.ToBalance = toAcct.Balance; //do balance transfer if (fromAcct.Balance < transferAmount) { throw new ArgumentOutOfRangeException(); } fromAcct.Balance -= transferAmount; toAcct.Balance += transferAmount; //save transaction _context.UpdateRange(fromAcct, toAcct); _context.AddRange(transaction); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } catch (Exception ex) { Console.WriteLine("Error Occurred: {0} ", ex); } } return(View(transaction)); }