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