/// <summary>
        /// Commits the transaction to the In Memory data Store.
        /// </summary>
        /// <param name="transaction"></param>
        protected internal override void ExecuteTransactionToDataSource(ITransactional transaction)
        {
            string transactionID = transaction.TransactionID();

            if (_transactionsExecutingToDataSource.ContainsKey(transactionID))
            {
                return;
            }
            _transactionsExecutingToDataSource.Add(transactionID, transaction);

            if (transaction is TransactionalBusinessObject)
            {
                IBusinessObject businessObject = ((TransactionalBusinessObject)transaction).BusinessObject;
                if (!_dataStoreInMemory.AllObjects.ContainsKey(businessObject.ID.ObjectID))
                {
                    _dataStoreInMemory.Add(businessObject);
                    if (businessObject.Props.HasAutoIncrementingField)
                    {
                        SupportsAutoIncrementingFieldBO supportsAutoIncrementingFieldBO = new SupportsAutoIncrementingFieldBO(businessObject);
                        long autoIncrementingNumber = _dataStoreInMemory.GetNextAutoIncrementingNumber(businessObject.ClassDef);
                        supportsAutoIncrementingFieldBO.SetAutoIncrementingFieldValue(autoIncrementingNumber);
                    }
                }
                else if (businessObject.Status.IsDeleted)
                {
                    DeleteRelatedChildren(businessObject);
                    DereferenceRelatedChildren(businessObject);
                    _dataStoreInMemory.Remove(businessObject);
                }
            }
            base.ExecuteTransactionToDataSource(transaction);
        }
        /// <summary>
        /// Generates an "insert" sql statement for the properties in the
        /// business object
        /// </summary>
        /// <param name="propsToInclude">A collection of properties to insert,
        /// if the previous include-all boolean was not set to true</param>
        /// <param name="tableName">The table name</param>
        private void GenerateSingleInsertStatement(IBOPropCol propsToInclude, string tableName)
        {
            ISupportsAutoIncrementingField supportsAutoIncrementingField = null;
            if (_bo.Props.HasAutoIncrementingField)
            {
                supportsAutoIncrementingField = new SupportsAutoIncrementingFieldBO(_bo);
            }
            this.InitialiseStatement(tableName, supportsAutoIncrementingField);

            ModifyForInheritance(propsToInclude);

            foreach (BOProp prop in _bo.Props.SortedValues)
            {
                if (propsToInclude.Contains(prop.PropertyName))
                {
                    if (!prop.PropDef.AutoIncrementing) 
                        AddPropToInsertStatement(prop);
                }
            }

            _insertSql.Statement.Append(String.Format(
                                            "INSERT INTO {0} ({1}) VALUES ({2})",
                                            _connection.SqlFormatter.DelimitTable(tableName),
                                            _dbFieldList, _dbValueList));
            _statements.Insert(0, _insertSql);
        }