public bool WithdrawAmountIntoBankAccount(int accountId, decimal currentAmount, decimal amountToWithdraw, DateTime accountLastModifiedDate)
        {
            using (this.Context.Database.BeginTransaction())
            {
                BankAccount bankAccount = this.Context.BankAccounts.Find(accountId);

                if (!CompareCurrentWithLastKnownDate(accountLastModifiedDate, bankAccount.ModifiedDate))
                {
                    throw new InvalidBankAccountModifiedTimeStamp("The Bank Account has been modified since your last read, state is inconsistent!");
                }

                if (bankAccount.Amount < amountToWithdraw)
                {
                    throw new InvalidBankAccountWithdrawException("The Amount in the Account is less than the amount the user wants to withdraw!");
                }

                bankAccount.ModifiedDate     = DateTime.UtcNow;
                bankAccount.ModifiedByUserID = this.UserID;

                BankAccountAudit bankAccountAudit = new BankAccountAudit();

                bankAccountAudit.PreviousAmount = bankAccount.Amount;

                bankAccount.Amount = bankAccount.Amount - amountToWithdraw;

                bankAccountAudit.CurrentAmount = bankAccount.Amount;

                bankAccountAudit.ChangeAmount = -amountToWithdraw;

                bankAccountAudit.CreatedByUserID = this.UserID;
                bankAccountAudit.CreatedDate     = bankAccount.ModifiedDate;

                bankAccountAudit.BankAccountOperationID = (int)AccountOperation.Withdraw;
                bankAccountAudit.TransferBankAccount    = bankAccount;

                bankAccount.BankAccountAudits = new List <BankAccountAudit>();
                bankAccount.BankAccountAudits.Add(bankAccountAudit);

                this.Context.BankAccountAudits.Add(bankAccountAudit);

                this.Context.SaveChanges();

                this.Context.Database.CommitTransaction();
            }

            return(true);
        }
        public bool DepositAmountIntoBankAccount(int accountId, decimal currentAmount, decimal amountToDeposit, DateTime accountLastModifiedDate)
        {
            using (this.Context.Database.BeginTransaction())
            {
                BankAccount bankAccount = this.Context.BankAccounts.Find(accountId);

                if (!CompareCurrentWithLastKnownDate(accountLastModifiedDate, bankAccount.ModifiedDate))//| bankAccount.Amount != currentAmount)
                {
                    throw new InvalidBankAccountModifiedTimeStamp("The Bank Account has been modified since your last read, state is inconsistent!");
                }


                bankAccount.ModifiedDate     = DateTime.UtcNow;
                bankAccount.ModifiedByUserID = this.UserID;

                BankAccountAudit bankAccountAudit = new BankAccountAudit();

                bankAccountAudit.PreviousAmount = bankAccount.Amount;

                bankAccount.Amount = bankAccount.Amount + amountToDeposit;

                bankAccountAudit.CurrentAmount = bankAccount.Amount;

                bankAccountAudit.ChangeAmount = amountToDeposit;

                bankAccountAudit.CreatedByUserID = this.UserID;
                bankAccountAudit.CreatedDate     = bankAccount.ModifiedDate;

                bankAccountAudit.BankAccountOperationID = (int)AccountOperation.Deposit;
                bankAccountAudit.TransferBankAccount    = bankAccount;

                bankAccount.BankAccountAudits = new List <BankAccountAudit>();
                bankAccount.BankAccountAudits.Add(bankAccountAudit);

                this.Context.BankAccountAudits.Add(bankAccountAudit);
                //this.Context.Entry(bankAccount).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

                this.Context.SaveChanges();

                this.Context.Database.CommitTransaction();
            }

            return(true);
        }