コード例 #1
0
        public virtual void BulkInsertIndexes(IndexesReader reader)
        {
            var isValueTypeIndexesReader = reader is ValueTypeIndexesReader;
            var fieldsToSkip             = GetIndexStorageSchemaFieldsToSkip(isValueTypeIndexesReader);

            using (reader)
            {
                if (reader.RecordsAffected < 1)
                {
                    return;
                }

                using (var bulkInserter = GetBulkCopy())
                {
                    bulkInserter.DestinationTableName = reader.StorageSchema.Name;
                    bulkInserter.BatchSize            = reader.RecordsAffected;

                    var fields = reader.StorageSchema.GetFieldsOrderedByIndex().Except(fieldsToSkip).ToArray();
                    foreach (var field in fields)
                    {
                        bulkInserter.AddColumnMapping(field.Name, field.Name);
                    }

                    bulkInserter.Write(reader);
                }
            }
        }
コード例 #2
0
        private void InsertIndexes(IndexesReader indexes)
        {
            using (var bulkInserter = _dbClient.GetBulkCopy())
            {
                bulkInserter.BatchSize = indexes.RecordsAffected;
                bulkInserter.DestinationTableName = indexes.StorageSchema.Name;
                bulkInserter.NotifyAfter = 0;

                foreach (var field in indexes.StorageSchema.FieldsByIndex.Values)
                    bulkInserter.ColumnMappings.Add(field.Name, field.Name);

                bulkInserter.WriteToServer(indexes);
                bulkInserter.Close();
            }
        }
コード例 #3
0
        internal void Insert(IStructureSchema structureSchema, IEnumerable<IStructure> structures)
        {
            var structureStorageSchema = new StructureStorageSchema(structureSchema);
            var indexesStorageSchema = new IndexStorageSchema(structureSchema);
            var uniquesStorageSchema = new UniqueStorageSchema(structureSchema);

            foreach (var batch in _elementsBatcher.Batch(structures))
            {
                using (var structuresReader = new StructuresReader(structureStorageSchema, batch))
                {
                    var indexRows = batch.Select(s => new IndexRow(s.Id, s.Indexes.ToArray()));
                    using (var indexesReader = new IndexesReader(indexesStorageSchema, indexRows))
                    {
                        using (var uniquesReader = new UniquesReader(uniquesStorageSchema, batch.SelectMany(s => s.Uniques).ToList()))
                        {
                            InsertStructures(structuresReader);
                            InsertIndexes(indexesReader);
                            InsertUniques(uniquesReader);
                        }
                    }
                }
            }
        }
コード例 #4
0
        protected virtual void BulkInsertIndexes(IndexesReader indexesReader)
        {
            var isValueTypeIndexesReader = indexesReader is ValueTypeIndexesReader;
            var fieldsToSkip = GetStorageSchemaFieldsToSkip(isValueTypeIndexesReader);

            using (indexesReader)
            {
                if (indexesReader.RecordsAffected < 1)
                    return;

                using (var bulkInserter = MainDbClient.GetBulkCopy())
                {
                    bulkInserter.DestinationTableName = indexesReader.StorageSchema.Name;
                    bulkInserter.BatchSize = indexesReader.RecordsAffected;

                    var fields = indexesReader.StorageSchema.GetFieldsOrderedByIndex().Except(fieldsToSkip).ToArray();
                    foreach (var field in fields)
                        bulkInserter.AddColumnMapping(field.Name, field.Name);

                    bulkInserter.Write(indexesReader);
                }
            }
        }