/// <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); }