public void CheckRecordNumber()
        {
            Database.SetInitializer(
                new DropCreateDatabaseAlways<ATMContext>());

            decimal money = 2000;
            decimal toWithdraw = 1000;
            int number = 1111111111;
            int cardPin = 1111;

            using (var db = new ATMContext())
            {
                db.CardAccounts.Add(new CardAccount()
                { CardCash = money, CardNumber = number, CardPIN = cardPin });

                db.SaveChanges();

                ATMActions.WithdrawMoney(cardPin, number, toWithdraw, db);
                db.SaveChanges();

                var actual = (from c in db.TransactionsHistory
                              select c).First();

                Assert.AreEqual(number, actual.CardNumber);
                db.Dispose();
            }
        }
示例#2
0
        public static bool WithdrawMoney(int PIN, int cardNumber, decimal moneyToWithdraw, ATMContext db)
        {
            bool success = true;
            int cardNumberToRecord = 0;


            using (var scope = new TransactionScope(
                        TransactionScopeOption.RequiresNew,
                        new TransactionOptions()
                        {
                            IsolationLevel = IsolationLevel.RepeatableRead
                        }
                    ))
            {
                var card = (from c in db.CardAccounts
                            where c.CardNumber == cardNumber
                            select c).First();


                if (card == null || card.CardPIN != PIN || card.CardCash < moneyToWithdraw)
                {
                    success = false;
                }
                else
                {
                    card.CardCash -= moneyToWithdraw;
                    cardNumberToRecord = card.CardNumber;
                    scope.Complete();
                }
            }

            if (success)
            {
                RecordWithdrawal(cardNumberToRecord, moneyToWithdraw, db);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }

        }