Пример #1
0
        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();
            }
        }