private void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (!LogicalOperation.IsRunningInAdapter && LogicalOperation.GetLogicalOperationStack().Peek() != this.data)
         {
             throw new InvalidOperationException("Logical operation stack has been corrupted");
         }
         LogicalOperation.StopLogicalOperation();
         Trace.CorrelationManager.ActivityId = this.previousActivityId;
     }
 }
 private static void StopLogicalOperation()
 {
     LogicalOperation.UpdateImmutableStack(LogicalOperation.GetLogicalOperationStack().Pop());
 }
 private static void StartLogicalOperation(object data)
 {
     LogicalOperation.UpdateImmutableStack(LogicalOperation.GetLogicalOperationStack().Push(data));
 }