internal static void ClearDestinationOrders() { int batchCounter = 0; int batchSize = 1000; DataModel dataModel = new DataModel(); try { DataModel.DataLock.EnterReadLock(); // This context is used to keep track of the locks aquired for the ancillary data. TransactionScope transactionScope = new TransactionScope(); DataModelTransaction dataModelTransaction = DataModelTransaction.Current; List <ExecutionRow> executionRows = new List <ExecutionRow>(); foreach (ExecutionRow executionRow in DataModel.Execution.Rows) { executionRows.Add(executionRow); } // Destroy all the executions. foreach (ExecutionRow executionRow in executionRows) { executionRow.AcquireReaderLock(dataModelTransaction.TransactionId, DataModel.LockTimeout); dataModelTransaction.AddLock(executionRow); dataModel.DestroyExecution(new object[] { executionRow.ExecutionId }, executionRow.RowVersion); if (batchCounter++ == batchSize) { batchCounter = 0; transactionScope.Complete(); transactionScope.Dispose(); transactionScope = new TransactionScope(); dataModelTransaction = DataModelTransaction.Current; } } List <DestinationOrderRow> destinationOrderRows = new List <DestinationOrderRow>(); foreach (DestinationOrderRow destinationOrderRow in DataModel.DestinationOrder.Rows) { destinationOrderRows.Add(destinationOrderRow); } // Destroy all the Destination Orders. foreach (DestinationOrderRow destinationOrderRow in destinationOrderRows) { destinationOrderRow.AcquireReaderLock(dataModelTransaction.TransactionId, DataModel.LockTimeout); dataModelTransaction.AddLock(destinationOrderRow); dataModel.DestroyDestinationOrder(new object[] { destinationOrderRow.DestinationOrderId }, destinationOrderRow.RowVersion); if (batchCounter++ == batchSize) { batchCounter = 0; transactionScope.Complete(); transactionScope.Dispose(); transactionScope = new TransactionScope(); dataModelTransaction = DataModelTransaction.Current; } } transactionScope.Complete(); transactionScope.Dispose(); } finally { DataModel.DataLock.ExitReadLock(); } }