Как TransactionScope откатывает транзакции?

Скобки в выражении довольно распространены. Сначала я отошлю вас к части 5 документации PLY , в которой приведен пример разбора вложенных выражений. Да, рекурсия - это ответ.

Есть несколько фраз, которые используются для обозначения «наименьшего элемента выражения». Вы можете увидеть «atom» или «term» (сокращение от «Terminal») или «primary-expression».

При работе с подвыражениями в скобках обычно используется именно такой подход. Напишите правило грамматики, которое объединяет различные низкоуровневые вещи (например, литеральные числа и имена переменных) и добавьте под-выражение в этой точке.

В этом примере, из документов PLY, expression является вещью самого высокого уровня и поддерживает сложение и вычитание. Следующий уровень - term, который поддерживает умножение и деление. Самым низким уровнем является factor, который не поддерживает никаких операций, но объединяет NUMBER и подвыражения в скобках. Фактором может быть 7, но также может быть (7 + 2 * 3).

 expression : expression + term
            | expression - term
            | term

 term       : term * factor
            | term / factor
            | factor

 factor     : NUMBER
            | ( expression )

95
задан mipe34 31 January 2013 в 09:52
поделиться

2 ответа

По существу TransactionScope не отслеживает Ваш Адаптер, что он делает это, отслеживает соединения с базой данных. При открытии соединения с БД, соединения будут взгляды, если будет окружающая транзакция (Область транзакций), и раз так поступите на службу в него. Осторожность, если существует больше одно соединение с тем же SQL-сервером, это возрастет к Транзакции Distribtued.

, Что происходит, так как Вы используете блок использования, который Вы гарантируете, располагают, будет назван, даже если исключение произойдет. Таким образом, если располагают, назван прежде txScope. Завершенный () TransactionScope скажет соединениям откатывать свои транзакции (или DTC).

105
ответ дан Paul Ruane 24 November 2019 в 05:51
поделиться

TransactionScope класс работает с Transaction класс , который является определенным для потока.

, Когда эти TransactionScope создается, это проверяет, чтобы видеть, существует ли Transaction для потока; если Вы существуете затем, это использует это, иначе, это создает новый и продвигает его на стек.

, Если это использует существующий, затем это просто увеличивает счетчик для выпусков (так как необходимо звонить Dispose на нем). На последнем выпуске, если эти Transaction не фиксировался, это откатывает всю работу.

Что касается того, почему классы, кажется, волшебно знают о транзакциях, который оставляют как деталь реализации для тех классов, которые хотят работать с этой моделью.

, Когда Вы создаете Ваш deptAdapter и emptAdapter экземпляры, они проверяют, чтобы видеть, существует ли текущая транзакция на потоке (помехи Current свойство на Transaction класс). Если существует, то это регистрирует себя в эти Transaction, для принятия участия в последовательности фиксации/отката (который Transaction средства управления, и могли бы propogate переменным координаторам транзакции, таким как ядро, распределенное, и т.д.).

52
ответ дан casperOne 24 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: