Exemplo n.º 1
0
        public virtual IStorageProviderCommand <ObjectLookupResult <DataContainer>, IRdbmsProviderCommandExecutionContext> CreateForSingleIDLookup(ObjectID objectID)
        {
            ArgumentUtility.CheckNotNull("objectID", objectID);

            var tableDefinition     = _tableDefinitionFinder.GetTableDefinition(objectID);
            var selectedColumns     = tableDefinition.GetAllColumns().ToArray();
            var dataContainerReader = _objectReaderFactory.CreateDataContainerReader(tableDefinition, selectedColumns);
            var comparedColumns     = tableDefinition.ObjectIDProperty.SplitValueForComparison(objectID);
            var dbCommandBuilder    = _dbCommandBuilderFactory.CreateForSelect(tableDefinition, selectedColumns, comparedColumns, new OrderedColumn[0]);

            var loadCommand = new SingleObjectLoadCommand <DataContainer> (dbCommandBuilder, dataContainerReader);

            return(new SingleDataContainerAssociateWithIDCommand <IRdbmsProviderCommandExecutionContext> (objectID, loadCommand));
        }
        private IEnumerable <Tuple <ObjectID, IDbCommandBuilder> > CreateDbCommandsForSave(IEnumerable <DataContainer> dataContainers)
        {
            var insertCommands = new List <Tuple <ObjectID, IDbCommandBuilder> >();
            var updateCommands = new List <Tuple <ObjectID, IDbCommandBuilder> >();
            var deleteCommands = new List <Tuple <ObjectID, IDbCommandBuilder> >();

            foreach (var dataContainer in dataContainers)
            {
                var tableDefinition = _tableDefinitionFinder.GetTableDefinition(dataContainer.ID);

                if (ShouldCreateInsertCommand(dataContainer))
                {
                    insertCommands.Add(Tuple.Create(dataContainer.ID, CreateDbCommandForInsert(dataContainer, tableDefinition)));
                }
                if (ShouldCreateDeleteCommand(dataContainer))
                {
                    deleteCommands.Add(Tuple.Create(dataContainer.ID, CreateDbCommandForDelete(dataContainer, tableDefinition)));
                }

                var updatedColumnValues = GetUpdatedColumnValues(dataContainer, tableDefinition);
                if (updatedColumnValues.Any())
                {
                    var dbCommandForUpdate = CreateDbCommandForUpdate(dataContainer, tableDefinition, updatedColumnValues);
                    updateCommands.Add(Tuple.Create(dataContainer.ID, dbCommandForUpdate));
                }
            }

            return(insertCommands.Concat(updateCommands).Concat(deleteCommands));
        }