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(); } }
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; } }