public BankAccountCreateResponse CreateBankAccount(BankAccountCreateRequest bankAccountCreateRequest)
        {
            BankAccountCreateResponse bankAccountCreateResponse = new BankAccountCreateResponse();
            BankAccount bankAccount = new BankAccount();

            bankAccount.CustomerRef = bankAccountCreateRequest.CustomerName;
            _bankRepository.Add(bankAccount);
            return bankAccountCreateResponse;
        }
        public void Add(BankAccount bankAccount)
        {
            string insertSql = "INSERT INTO BankAccounts " +
            "(BankAccountID, Balance, CustomerRef) VALUES " +
            "(@BankAccountID, @Balance, @CustomerRef)";

            using (SqlConnection connection =

                new SqlConnection(_connectionString))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = insertSql;
                SetCommandParametersForInsertUpdateTo(bankAccount, command);
                connection.Open();
                command.ExecuteNonQuery();
            }

            UpdateTransactionsFor(bankAccount);
        }
        public void Save(BankAccount bankAccount)
        {
            string bankAccoutnUpdateSql = "UPDATE BankAccounts " +
                                          "SET Balance = @Balance, CustomerRef= @CustomerRef " +
                                          "WHERE BankAccountID = @BankAccountID;";

            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = bankAccoutnUpdateSql;
                SetCommandParametersForInsertUpdateTo(bankAccount, command);
                connection.Open();
                command.ExecuteNonQuery();
            }

            UpdateTransactionsFor(bankAccount);
        }
        private void UpdateTransactionsFor(BankAccount bankAccount)
        {
            string deleteTransactionSQl = "DELETE Transactions WHERE BankAccountId = @BankAccountId;";

            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = deleteTransactionSQl;
                command.Parameters.Add(
                new SqlParameter("@BankAccountID", bankAccount.AccountNo));
                connection.Open();
                command.ExecuteNonQuery();
            }

            string insertTransactionSql = "INSERT INTO Transactions " +
                                            "(BankAccountID, Deposit, Withdraw, Reference, [Date]) VALUES " +
                                            "(@BankAccountID, @Deposit, @Withdraw, @Reference, @Date)";

            foreach (Transaction tran in bankAccount.GetTransactions())
            {
                using (SqlConnection connection = new SqlConnection(_connectionString))
                {
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = insertTransactionSql;
                    command.Parameters.Add(
                    new SqlParameter("@BankAccountID",
                    bankAccount.AccountNo));
                    command.Parameters.Add(new SqlParameter("@Deposit", tran.Deposit));
                    command.Parameters.Add(
                    new SqlParameter("@Withdraw", tran.Withdrawal));
                    command.Parameters.Add(
                    new SqlParameter("@Reference", tran.Reference));
                    command.Parameters.Add(new SqlParameter("@Date", tran.Date));
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }
        }
        private IList<BankAccount> CreateListOfAccountsFrom(IDataReader datareader)
        {
            IList<BankAccount> accounts = new List<BankAccount>();
            BankAccount bankAccount;
            string id = "";
            IList<Transaction> transactions = new List<Transaction>();

            while (datareader.Read())
            {
                if (id != datareader["BankAccountId"].ToString())
                {
                    id = datareader["BankAccountId"].ToString();
                    transactions = new List<Transaction>();
                    bankAccount = new BankAccount(new Guid(id), Decimal.Parse(datareader["Balance"].ToString()),
                    transactions, datareader["CustomerRef"].ToString());
                    accounts.Add(bankAccount);
                }

                transactions.Add(CreateTransactionFrom(datareader));
            }

            return accounts;
        }
 private static void SetCommandParametersForInsertUpdateTo(BankAccount bankAccount, SqlCommand command)
 {
     command.Parameters.Add(new SqlParameter("@BankAccountID", bankAccount.AccountNo));
     command.Parameters.Add(new SqlParameter("@Balance", bankAccount.Balance));
     command.Parameters.Add(new SqlParameter("@CustomerRef", bankAccount.CustomerRef));
 }