public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { // find the two account entities and add them to the Container Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First(); Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First(); // update the two accounts lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); // save changed entities and finish the transaction lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); throw; } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); throw; } } }
public void Transfer(Guid OrderNumber, double pAmount, int pFromAcctNumber, int pToAcctNumber, String pResultReturnAddress) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { IBankNotificationService lOutcomeService = OperationOutcomeServiceFactory.GetOperationOutcomeService(pResultReturnAddress); try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); lOutcomeService.NotifyOperationOutcome(OrderNumber, DeliveryInfoStatus.Successful, "Success"); Console.WriteLine("Just sent a message of successful transaction to order: " + OrderNumber.ToString()); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); lOutcomeService.NotifyOperationOutcome(OrderNumber, DeliveryInfoStatus.Failed, "Error occured while transferring money: " + lException.Message); Console.WriteLine("Just sent message to notify VideoStore that one transfer has failed, Order Number: " + OrderNumber.ToString()); lScope.Complete(); lScope.Dispose(); } } }
private static void CreateDummyEntities() { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { if (lContainer.Accounts.Count() == 0) { Customer lVideoStore = new Customer(); Account lVSAccount = new Account() { AccountNumber = 123, Balance = 0 }; lVideoStore.Accounts.Add(lVSAccount); Customer lCustomer = new Customer(); Account lCustAccount = new Account() { AccountNumber = 456, Balance = 20 }; lCustomer.Accounts.Add(lCustAccount); lContainer.Customers.AddObject(lVideoStore); lContainer.Customers.AddObject(lCustomer); lContainer.SaveChanges(); lScope.Complete(); } } }
private Account GetAccountFromNumber(int pToAcctNumber) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { return(lContainer.Accounts.Where((pAcct) => (pAcct.AccountNumber == pToAcctNumber)).FirstOrDefault()); } }
//public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber) public void Transfer(Message message) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { //Specify the binding to be used for the client. NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None); //Specify the address to be used for the client. EndpointAddress address = new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue"); PublisherServiceClient lClient = new PublisherServiceClient(binding, address); try { TransferMessage transferMessage = message as TransferMessage; double pAmount = transferMessage.Total; int pFromAcctNumber = transferMessage.FromAccountNumber; int pToAcctNumber = transferMessage.ToAccountNumber; Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); Console.WriteLine("Amount: " + pAmount + " FromAccount: " + pFromAcctNumber + " ToAccount: " + pToAcctNumber); // Return successful result TransferMessage result = new TransferMessage() { Topic = "bank", OrderGuid = transferMessage.OrderGuid, BTransfer = true }; //HostServiceAndPublishMessage(result); lClient.Publish(result); lScope.Complete(); } catch (Exception lException) { // Return Failure result TransferMessage transferMessage = message as TransferMessage; TransferMessage result = new TransferMessage() { Topic = "bank", OrderGuid = transferMessage.OrderGuid, BTransfer = false, Comment = lException.Message }; // HostServiceAndPublishMessage(result); lClient.Publish(result); lScope.Complete(); Console.WriteLine("Error occured while transferring money: " + lException.Message); //throw; } } }
public double GetAccountBalance(int pAcctId) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault(); return(lAcct.Balance); } }
public double ShowBalance(int id) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { Account lAcct = lContainer.Accounts.Where((account) => account.Id == id).FirstOrDefault(); return(lAcct.Balance); } }
private static void CreateDummyEntities() { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { if (lContainer.Accounts.Count() == 0) { Customer lBookStore = new Customer(); Account lBSAccount = new Account() { AccountNumber = 123, Balance = 0 }; lBookStore.Accounts.Add(lBSAccount); Customer lCustomer = new Customer(); Account lCustAccount = new Account() { AccountNumber = 456, Balance = 200 }; lCustomer.Accounts.Add(lCustAccount); lContainer.Customers.Add(lBookStore); lContainer.Customers.Add(lCustomer); lContainer.SaveChanges(); lScope.Complete(); } } // testing Transfer code //using (TransactionScope lScope = new TransactionScope()) //using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) //{ // try // { // int pFromAcctNumber = 456; // int pToAcctNumber = 123; // int pAmount = 50; // // find the two account entities and add them to the Container // Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First(); // Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First(); // // update the two accounts // lFromAcct.Withdraw(pAmount); // lToAcct.Deposit(pAmount); // // save changed entities and finish the transaction // lContainer.SaveChanges(); // lScope.Complete(); // } // catch (Exception lException) // { // Console.WriteLine("Error occured while transferring money: " + lException.Message); // throw; // } //} }
public int CreateCustomer(Customer pCustomer) { using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Required)) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { lContainer.Customers.AddObject(pCustomer); lContainer.SaveChanges(); lScope.Complete(); } return(pCustomer.Id); }
public int CreateAccount(int pCustId, Account pAcct) { using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Required)) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { Customer lCust = (from cust in lContainer.Customers where cust.Id == pCustId select cust).FirstOrDefault(); lCust.Accounts.Add(pAcct); lContainer.SaveChanges(); lScope.Complete(); } return(pAcct.Id); }
private Account GetAccountFromNumber(int pToAcctNumber) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { Console.WriteLine("===============Get Account Numbe==============="); Console.WriteLine("Account number gotten: " + pToAcctNumber); Console.WriteLine("Transfer time: " + DateTime.Now); Console.WriteLine("==============================================="); Console.WriteLine(" "); return(lContainer.Accounts.Where((pAcct) => (pAcct.AccountNumber == pToAcctNumber)).FirstOrDefault()); } }
public void Withdraw(int pAcctId, double pAmount) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { LockAccount(pAcctId); Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault(); if (lAcct != null) { lAcct.Balance -= pAmount; lContainer.SaveChanges(); } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription) { bool lOutcome = true; String lMessage = "TransferSuccessful"; String lLogMessage; try { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); lLogMessage = "Transfer Request Succeeded - received via MSMQ - (pAmount=" + pAmount + " , pFromAcctNumber=" + pFromAcctNumber + " , pToAcctNumber=" + pToAcctNumber + " , pDescription=" + pDescription + " , lMessage= " + lMessage + " )"; //we have to fill this within transaction scope or VS goes mad lScope.Complete(); } SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", lLogMessage); } catch (Exception lException) { SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", "Transfer Request Failed - received via MSMQ - (pAmount=" + pAmount + " , pFromAcctNumber=" + pFromAcctNumber + " , pToAcctNumber=" + pToAcctNumber + " , pDescription=" + pDescription + " , lMessage= " + lMessage + " )"); Console.WriteLine("Error occured while transferring money: " + lException.Message); lMessage = lException.Message; lOutcome = false; throw; } finally { try { TransferNotificationService.TransferNotificationServiceClient lClient = new TransferNotificationService.TransferNotificationServiceClient(); lClient.NotifyTransferOutcome(lOutcome, lMessage, pDescription); } catch (Exception lException) { SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", "Error occured when sending Notification of Transfer Outcome to VideoStore - via MSMQ - (lException.Message=" + lException.Message + ")"); } } }
public void Deposit(int pAcctId, double pAmount) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { LockAccount(pAcctId); Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault(); if (lAcct != null) { lAcct.Balance += pAmount; Logger.Log("Depositing Money"); lContainer.SaveChanges(); } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderGuid, int pCustomerId) { using (TransactionScope lScope = new TransactionScope()) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { // find the two account entities and add them to the Container Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First(); Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First(); // update the two accounts lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Accounts.Attach(lFromAcct); lContainer.Accounts.Attach(lToAcct); lContainer.Entry(lFromAcct).State = EntityState.Modified; lContainer.Entry(lToAcct).State = EntityState.Modified; Console.WriteLine("Funds transfer successful for Order Number " + pOrderGuid.ToString()); var lItem = new FundsTransferSuccessful { OrderGuid = pOrderGuid, CustomerId = pCustomerId }; var lVisitor = new FundsTransferSuccessfulToMessage(); lItem.Accept(lVisitor); PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(lVisitor.Result); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); var lItem = new FundsTransferError { OrderGuid = pOrderGuid, Error = lException }; var lVisitor = new FundsTransferErrorToMessage(); lItem.Accept(lVisitor); PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(lVisitor.Result); } // save changed entities and finish the transaction lContainer.SaveChanges(); lScope.Complete(); } } }
//public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber) public void Transfer(Message message) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { TransferMessage transferMessage = message as TransferMessage; double pAmount = transferMessage.Total; int pFromAcctNumber = transferMessage.FromAccountNumber; int pToAcctNumber = transferMessage.ToAccountNumber; Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); // Return successful result TransferMessage result = new TransferMessage() { Topic = "transfer", OrderGuid = transferMessage.OrderGuid, BTransfer = true }; HostServiceAndPublishMessage(result); lScope.Complete(); } catch (Exception lException) { // Return Failure result TransferMessage transferMessage = message as TransferMessage; TransferMessage result = new TransferMessage() { Topic = "transfer", OrderGuid = transferMessage.OrderGuid, BTransfer = false, Comment = lException.Message }; HostServiceAndPublishMessage(result); lScope.Complete(); Console.WriteLine("Error occured while transferring money: " + lException.Message); //throw; } } }
private void LockAccount(int pAcctId) { using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) using (SqlConnection lConn = new SqlConnection((lContainer.Connection as System.Data.EntityClient.EntityConnection).StoreConnection.ConnectionString)) using (SqlCommand lCmd = new SqlCommand()) { lCmd.CommandText = @" select * from dbo.Accounts with (updlock) where Id = @p_AccountId "; lCmd.Parameters.AddWithValue("@p_AccountId", pAcctId); lCmd.Connection = lConn; lConn.Open(); lCmd.ExecuteNonQuery(); } }
public void Transfer(double amount, int fromAccountNo, int toAccountNo) { using (TransactionScope scope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { // The lContainer is an ObjectContext. It's the primary way for interacting with // entities. It encapsulates a connection to the database, contains metadata for // the model, and contains an ObjectStateManager which manages objects in the cache try { Account fromAccount = GetAccountFromNumber(fromAccountNo); Account toAccount = GetAccountFromNumber(toAccountNo); // Perform the transfer on the local instances of the entities. fromAccount.Withdraw(amount); toAccount.Deposit(amount); // Attach the accounts to the object context. This is done because we know the // entity already exists. It's just not being tracked by this context. lContainer.Attach(fromAccount); lContainer.Attach(toAccount); // Change the state of the entity (ObjectStateEntry) for the specific object. // Some info from https://msdn.microsoft.com/en-gb/data/jj592676 // Added - Tracked by lContainer, does not exist in DB // Unchanged - Tracked by lContainer, exists, and has not changed from the // values in the database // Modified - Tracked by lContainer, exists, but properties have been changed. // Deleted - Tracked, exists, marked for deletion on SaveChanges() // Detached - Not tracked. var osm = lContainer.ObjectStateManager; osm.ChangeObjectState(fromAccount, EntityState.Modified); osm.ChangeObjectState(toAccount, EntityState.Modified); // Modified entities are updated in the database and are now Unchanged. lContainer.SaveChanges(); scope.Complete(); } catch (Exception lException) { Console.WriteLine( "Error occured while transferring money: " + lException.Message); throw; } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pExternalOrderId) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); Common.Model.TransferResultMessage transferResultMessage = new Common.Model.TransferResultMessage() { Topic = "VideoStore", Success = true, OrderNumber = pExternalOrderId, Message = "Transfer success" }; PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(transferResultMessage); } catch (Exception lException) { Common.Model.TransferResultMessage transferResultMessage = new Common.Model.TransferResultMessage() { Topic = "VideoStore", Success = false, OrderNumber = pExternalOrderId, Message = "Error occured while transferring money: " + lException.Message }; //Console.WriteLine("Error occured while transferring money: " + lException.Message); //throw; PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(transferResultMessage); } lScope.Complete(); } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderGuid, int pCustomerId) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); var lItem = new TransferComplete { OrderGuid = pOrderGuid, CustomerId = pCustomerId }; var lVisitor = new TransferCompleteToTransferCompleteMessage(); lItem.Accept(lVisitor); PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(lVisitor.Result); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); var lItem = new TransferError { OrderGuid = pOrderGuid }; var lVisitor = new TransferErrorToTransferErrorMessage(); lItem.Accept(lVisitor); PublisherServiceClient lClient = new PublisherServiceClient(); lClient.Publish(lVisitor.Result); } lContainer.SaveChanges(); lScope.Complete(); } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, string pTransferNotificationAddress, string pTransferReference) { try { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); TransferNotificationServiceFactory.GetTransferNotificationService(pTransferNotificationAddress) .NotifyTransferSuccess(pTransferReference); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); throw; } } } catch (Exception lException) { using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Suppress)) { TransferNotificationServiceFactory.GetTransferNotificationService(pTransferNotificationAddress) .NotifyTransferFailed(pTransferReference, lException.Message); lScope.Complete(); } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, string pOrderNumber) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); if (lFromAcct.Withdraw(pAmount)) { lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); lContainer.SaveChanges(); Console.WriteLine("Transfered sucessfully! This payment cost : " + pAmount); TransferNotificationService.ITransferNotificationService lClient = new TransferNotificationService.TransferNotificationServiceClient(); lClient.NotifyTransferResult(true, "Transfer successful! The amount is " + pAmount, pOrderNumber); } else { Console.WriteLine("Transfered failed!"); TransferNotificationService.ITransferNotificationService lClient = new TransferNotificationService.TransferNotificationServiceClient(); lClient.NotifyTransferResult(false, "Transfer failed! Please check your bank account balance!", pOrderNumber); } lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); throw; } finally { lScope.Dispose(); } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderNumber, string pReturnAddress) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { //IOperationOutcomeService lOutcomeService = OperationOutcomeServiceFactory.GetOperationOutcomeService(pResultReturnAddress); try { Account lFromAcct = GetAccountFromNumber(pFromAcctNumber); Account lToAcct = GetAccountFromNumber(pToAcctNumber); lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); lContainer.Attach(lFromAcct); lContainer.Attach(lToAcct); lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified); lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified); NotificationService.NotificationServiceClient IClient = new NotificationService.NotificationServiceClient("NetMsmqBinding_INotificationService", pReturnAddress); IClient.NotifyBankTransactionCompleted(pOrderNumber, OperationOutcome.Successful); lContainer.SaveChanges(); lScope.Complete(); //lOutcomeService.NotifyOperationOutcome(new OperationOutcome() { Outcome = OperationOutcome.OperationOutcomeResult.Successful }); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); NotificationService.NotificationServiceClient IClient = new NotificationService.NotificationServiceClient("NetMsmqBinding_INotificationService", pReturnAddress); IClient.NotifyBankTransactionCompleted(pOrderNumber, OperationOutcome.Failure); lScope.Complete(); //throw; //lOutcomeService.NotifyOperationOutcome(new OperationOutcome() { Outcome = OperationOutcome.OperationOutcomeResult.Failure, Message = lException.Message }); } } }
public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, string pNotificationAddress, string pReference, string customerEmail) { /* IOutcomeNotificationService notify; * try * { * ChannelFactory<IOutcomeNotificationService> lChannelFactory = * new ChannelFactory<IOutcomeNotificationService>(new NetMsmqBinding("NetMsmqBinding_IOperationOutcomeService"), new EndpointAddress(pReference)); * notify = lChannelFactory.CreateChannel(); * } * catch (Exception lException) * { * Console.WriteLine("Error occurred: " + lException.Message); * throw; * } */ try { // OperationOutcome outcome = new OperationOutcome(); using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { // find the two account entities and add them to the Container Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First(); Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First(); // update the two accounts lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); // save changed entities and finish the transaction lContainer.SaveChanges(); // lScope.Complete(); // outcome.Outcome = OperationOutcome.OperationOutcomeResult.Successful; // outcome.Message = "Success! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful."; //Console.WriteLine("Sucess! Transfer at " + DateTime.Now + ": From account number "+ pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful."); // Console.WriteLine("Notification address " + pNotificationAddress); // TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress) // .NotifyTransferSuccess(pReference); ITransferNotificationService lChannel = TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress); lChannel.NotifyTransferSuccess(pReference, customerEmail); Console.WriteLine("Sucess! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful."); // Console.WriteLine("Channel notify success message " + pReference); // Console.WriteLine("Sucess! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful."); // lChannel.NotifyTransferSuccess(pReference); lScope.Complete(); } catch (Exception lException) { Console.WriteLine("Error occured while transferring money: " + lException.Message); //outcome.Outcome = OperationOutcome.OperationOutcomeResult.Failure; // outcome.Message = "Error occured while transferring money: " + lException.Message; // outcome.Message = "Failure!! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was unsuccessful."; throw; } } } catch (Exception lException) { using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Suppress)) { Console.WriteLine("Channel failure message " + pReference); TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress) .NotifyTransferFailed(pReference, lException.Message, customerEmail); lScope.Complete(); } } // notify.NotifyOperationOutcome(pReference, outcome); }
public string Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber) { using (TransactionScope lScope = new TransactionScope()) using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) { try { // find the two account entities and add them to the Container Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First(); Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First(); if (lFromAcct.Balance - pAmount < 0) { String lMessage = "Transfer Failed: Insufficient Amount"; Console.WriteLine("=================Transfer================="); Console.WriteLine("From: " + pFromAcctNumber); Console.WriteLine("To: " + pToAcctNumber); Console.WriteLine("Total: " + pAmount); Console.WriteLine("Transfer time: " + DateTime.Now); Console.WriteLine("Status: TRANSFER FAILED"); Console.WriteLine("==========================================" + "\n"); return(lMessage); } // update the two accounts lFromAcct.Withdraw(pAmount); lToAcct.Deposit(pAmount); Console.WriteLine("=================Transfer================="); Console.WriteLine("From: " + pFromAcctNumber); Console.WriteLine("To: " + pToAcctNumber); Console.WriteLine("Total: " + pAmount); Console.WriteLine("Transfer time: " + DateTime.Now); Console.WriteLine("Status: TRANSFER COMPLETED"); Console.WriteLine("==========================================" + "\n"); // save changed entities and finish the transaction lContainer.SaveChanges(); lScope.Complete(); } catch (ArgumentNullException lException) { Console.WriteLine("===========Error in Transfer Money============"); Console.WriteLine("Error occured while transferring money: " + lException.Message); Console.WriteLine("Error: one of the accounts does not exist"); Console.WriteLine("=============================================="); Console.WriteLine(" "); String lMessage = "Transfer Failed: One of the accounts does not exist"; // TODO Find the proper account Console.WriteLine(lMessage); return(lMessage); } catch (Exception lException) { Console.WriteLine("===========Error in Transfer Money============"); Console.WriteLine("Error occured while transferring money: " + lException.Message); Console.WriteLine("Error: Unknown Error"); Console.WriteLine("=============================================="); Console.WriteLine(" "); return("Transfer Failed: Unknown Error"); } } string lSuccessMessage = "Transfer Success"; Console.WriteLine(lSuccessMessage); return(lSuccessMessage); }