public static void WithdrawMoney(AtmDataDbContext context, CardAccount card, decimal amount) { var transaction = context.Database.BeginTransaction(); try { CardAccount targetCard; var found = context.CardAccounts.Where(c => c.CardNumber == card.CardNumber && c.CardPIN == card.CardPIN && c.CardCash >= amount); if (found.Count() == 0) { throw new ApplicationException("Invalid card operation attempt."); } targetCard = found.First(); Console.WriteLine("Initial balance: {0}", targetCard.CardCash); targetCard.CardCash -= amount; context.SaveChanges(); context.TransactionsHistories.Add(new TransactionsHistory() { CardNumber = card.CardNumber, TransactionDate = DateTime.Now, Amount = amount }); context.SaveChanges(); transaction.Commit(); Console.WriteLine("Transaction completed successfully."); Console.WriteLine("Balance after the transaction: {0}", targetCard.CardCash); } catch (Exception e) { Console.WriteLine("Transaction not completed. Changes rolled back."); Console.WriteLine(e.Message); transaction.Rollback(); } }
public static void Main() { var context = new AtmDataDbContext(); using (context) { Console.WriteLine("All cards:"); Console.WriteLine(string.Join(Environment.NewLine, context.CardAccounts.Select(c => new { Card = c.CardNumber, Balance = c.CardCash }))); try { var targetCard = new CardAccount() { CardNumber = "1234567892", CardPIN = 3434 }; WithdrawMoney(context, targetCard, 200m); WithdrawMoney(context, targetCard, 2000m); } catch (Exception e) { Console.WriteLine(e.Message); } } }