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);
                        }
                    }
                }
            }
        }
Example #2
0
        public virtual void BulkInsertUniques(IStructureSchema structureSchema, IStructureIndex[] uniques)
        {
            if (!uniques.Any())
            {
                return;
            }

            using (var uniquesReader = new UniquesReader(new UniqueStorageSchema(structureSchema, structureSchema.GetUniquesTableName()), uniques))
            {
                using (var bulkInserter = GetBulkCopy())
                {
                    bulkInserter.DestinationTableName = uniquesReader.StorageSchema.Name;
                    bulkInserter.BatchSize            = uniques.Length;

                    var fields = uniquesReader.StorageSchema.GetFieldsOrderedByIndex().Where(f => !f.Equals(StructureStorageSchema.Fields.RowId)).ToArray();
                    foreach (var field in fields)
                    {
                        bulkInserter.AddColumnMapping(field.Name, field.Name);
                    }

                    bulkInserter.Write(uniquesReader);
                }
            }
        }
        private void InsertUniques(UniquesReader uniques)
        {
            using (var bulkInserter = _dbClient.GetBulkCopy())
            {
                bulkInserter.BatchSize = uniques.RecordsAffected;
                bulkInserter.DestinationTableName = uniques.StorageSchema.Name;
                bulkInserter.NotifyAfter = 0;

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

                bulkInserter.WriteToServer(uniques);
                bulkInserter.Close();
            }
        }
        protected virtual void BulkInsertUniques(IStructureSchema structureSchema, IStructureIndex[] uniques)
        {
            if (!uniques.Any())
                return;

            var uniquesStorageSchema = new UniqueStorageSchema(structureSchema, structureSchema.GetUniquesTableName());

            using (var uniquesReader = new UniquesReader(uniquesStorageSchema, uniques))
            {
                using (var bulkInserter = MainDbClient.GetBulkCopy())
                {
                    bulkInserter.DestinationTableName = uniquesReader.StorageSchema.Name;
                    bulkInserter.BatchSize = uniques.Length;

                    var fields = uniquesReader.StorageSchema.GetFieldsOrderedByIndex().Where(f => !f.Equals(StructureStorageSchema.Fields.RowId)).ToArray();
                    foreach (var field in fields)
                        bulkInserter.AddColumnMapping(field.Name, field.Name);

                    bulkInserter.Write(uniquesReader);
                }
            }
        }