public ReplicateInBulkCommand(
     StorageDescriptor sourceStorageDescriptor,
     StorageDescriptor targetStorageDescriptor,
     DbManagementMode databaseManagementMode = DbManagementMode.DropAndRecreateConstraints | DbManagementMode.EnableIndexManagment | DbManagementMode.UpdateTableStatistics,
     ExecutionMode executionMode = ExecutionMode.Parallel,
     TimeSpan? bulkCopyTimeout = null)
 {
     SourceStorageDescriptor = sourceStorageDescriptor;
     TargetStorageDescriptor = targetStorageDescriptor;
     DbManagementMode = databaseManagementMode;
     ExecutionMode = executionMode;
     BulkCopyTimeout = bulkCopyTimeout ?? DefaultBulkCopyTimeout;
 }
        private void ReplaceInBulk(IReadOnlyCollection<Type> dataObjectTypes, StorageDescriptor sourceStorageDescriptor, DataConnection targetConnection, IReadOnlyCollection<ICommand> replicationCommands)
        {
            DataConnection sourceConnection;

            // Creating connection to source that will NOT be enlisted in transactions
            using (var scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                sourceConnection = CreateDataConnection(sourceStorageDescriptor);
                if (sourceConnection.Connection.State != ConnectionState.Open)
                {
                    sourceConnection.Connection.Open();
                }

                scope.Complete();
            }

            using (sourceConnection)
            {
                var actorsFactory = new ReplaceDataObjectsInBulkActorFactory(dataObjectTypes, sourceConnection, targetConnection);
                var actors = actorsFactory.Create();

                foreach (var actor in actors)
                {
                    var sw = Stopwatch.StartNew();
                    actor.ExecuteCommands(replicationCommands);
                    sw.Stop();

                    Console.WriteLine($"[{DateTime.Now}] [{Environment.CurrentManagedThreadId}] {actor.GetType().GetFriendlyName()}: {sw.Elapsed.TotalSeconds} seconds");
                }
            }
        }
 private DataConnection CreateDataConnection(StorageDescriptor storageDescriptor)
 {
     var connectionString = _connectionStringSettings.GetConnectionString(storageDescriptor.ConnectionStringIdentity);
     var connection = SqlServerTools.CreateDataConnection(connectionString);
     connection.AddMappingSchema(storageDescriptor.MappingSchema);
     connection.CommandTimeout = (int)storageDescriptor.CommandTimeout.TotalMilliseconds;
     return connection;
 }