/// <summary> /// save the customer and its dependent objects wrapped in one SqlTransaction /// </summary> /// <param name="customer"></param> internal void Save(Customer customer) { BaseDatabase _baseDatabase = new BaseDatabase(); SqlTransaction transaction = null; using (SqlConnection sqlConnection = new SqlConnection(_databaseSmoObjectsAndSettings.ConnectionString)) { // begin and the rest are set to enlist BaseDatabase.TransactionBehavior transactionBehavior = BaseDatabase.TransactionBehavior.Begin; try { SavePerson(customer, sqlConnection, ref transaction, transactionBehavior); SaveAddress(customer, sqlConnection, ref transaction, transactionBehavior); SaveContact(customer, sqlConnection, ref transaction, transactionBehavior); _baseDatabase.CommitTransaction(ref transaction); ResetModifiedState(customer); } catch (BeginTransactionException beginTrans) { _baseDatabase.RollbackTransaction(ref transaction); //this is a developer specific type of exception throw new ApplicationException(beginTrans.Message); } catch (Exception ex) { //ensure transaction is rolled back _baseDatabase.RollbackTransaction(ref transaction); //bubble it back up to consumer for graceful recovery throw ex; } } }
public virtual void Delete(SqlConnection connection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior, ref object returnValueFromExecution) { if (this.BaseDataAccessAvailable()) { CodeSampleApplication.Dto.Address dto = _baseBusiness.FillDtoWithThis(this); CodeSampleApplication.Dto.Address returnDto = _baseDataAccess.Delete(dto, connection, ref transaction, transactionBehavior, out returnValueFromExecution); this.FillThisWithDto(returnDto); } else { throw new System.ApplicationException(FILL_DB_SETTINGS_EXCEPTION); } }
private void SaveContact(Customer customer, SqlConnection sqlConnection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior) { object returnValueFromExecution = null; foreach (Contact contact in customer.CustomerContacts) { switch (contact.ModifiedState) { case ModifiedState.New: { contact.Insert(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Modified: { contact.Update(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Deleted: { contact.Delete(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } } } }
private void SaveAddress(Customer customer, SqlConnection sqlConnection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior) { object returnValueFromExecution = null; foreach (Address address in customer.CustomerAddresses) { switch (address.ModifiedState) { case ModifiedState.New: { address.Insert(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Modified: { address.Update(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Deleted: { address.Delete(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } } } }
private void SavePerson(Customer customer, SqlConnection sqlConnection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior) { object returnValueFromExecution = null; switch (customer.CustomerModifiedState) { case ModifiedState.New: { ((Person)customer).Insert(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Modified: { ((Person)customer).Update(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } case ModifiedState.Deleted: { ((Person)customer).Delete(sqlConnection, ref transaction, transactionBehavior, ref returnValueFromExecution); break; } } }
private bool InsertPasswordResetRequest(Account account, string passwordResetCode, SqlConnection connection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior) { object returnValue = null; BaseDataAccess <PasswordResetRequest> bdPasswordResetRequest = new BaseDataAccess <PasswordResetRequest>(_smoSettings[CONNECTION_STRING_NAME]); PasswordResetRequest passwordResetRequest = new PasswordResetRequest(); passwordResetRequest.PasswordResetRequestID = Guid.NewGuid(); passwordResetRequest.PasswordResetCode = passwordResetCode; passwordResetRequest.AccountID = account.AccountID; returnValue = bdPasswordResetRequest.Insert(passwordResetRequest, _smoSettings[CONNECTION_STRING_NAME].Connection, ref transaction, transactionBehavior, out returnValue); bool insertPasswordResetRequest = DoWeHaveASingleRecordInsertProblem(returnValue); passwordResetRequest = (PasswordResetRequest)returnValue; return(!insertPasswordResetRequest); }
private bool UpdateAccount(Account account, SqlConnection sqlConnection, ref SqlTransaction transaction, BaseDatabase.TransactionBehavior transactionBehavior) { object returnValue = null; BaseDataAccess <Account> bdAccount = new BaseDataAccess <Account>(_smoSettings[CONNECTION_STRING_NAME]); account.Deleted = true; account.ModifiedDateTime = DateTime.Now; returnValue = bdAccount.Update(account, _smoSettings[CONNECTION_STRING_NAME].Connection, ref transaction, transactionBehavior, out returnValue); bool updateAccountProblem = DoWeHaveASingleRecordInsertProblem(returnValue); account = (Account)returnValue; return(!updateAccountProblem); }