Example #1
0
        /// <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);
     }
 }
Example #3
0
        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;
                }
                }
            }
        }
Example #4
0
        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;
                }
                }
            }
        }
Example #5
0
        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;
            }
            }
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }