Мы думаем, что мы понимаем TransactionScope и вложенности (transactionscope.requires) - т.е..net вложенности TransactionScope
------------------------------------------------------- inner | outer | ------------------------------------------------------- commit | rollback | no changes are committed commit | commit | all changes are committed rollback | rollback | no changes are committed rollback | commit | ---- doesn't work ----
Однако мне интересно, есть ли способ создания TransactionScope, вложенную TransactionScope, зависимая транзакция, пользовательская транзакция или что-то еще, где также работает сценарий фиксации отката? -
т. Е. У вас есть что-то в функции библиотеки, которая имеет свою собственную транзакцию по любой причине, которая живет под родительской транзакцией. если внутренняя преуспевает, тогда внешняя транзакция имеет доступ к любым изменениям, но если внутренний возврат обратно, внешняя транзакция все еще находится в полностью работоспособном состоянии и полностью не подвержена внутренней транзакции, как если бы она никогда не вызывалась?
Что вы просите здесь _ought_, чтобы поддерживать его напрямую, ИМХО, но, по-видимому, нет. –
Согласен. - и мы уже работали над этим, но на данный момент это скорее интеллектуальное любопытство - то есть на самом деле это невозможно сделать, чтобы он работал так? Я думал о чем-то вроде использования унаследованной области и переопределял распоряжение, поэтому он ничего не делает, кроме своего запоминания, но затем следующий бит кода видит базу данных так, как будто вы совершили транзакцию, или каким-то образом волшебным образом ее поймать , и впоследствии создавая еще одну область транзакций, но затем вы теряете все, что было до нее. Это довольно интересная проблема! –
Я считаю, что вы вводите в заблуждение транзакции базы данных (которые помогают обеспечить согласованность данных и атомные изменения) с чем-то другим, например, единицами работы. С точки зрения согласованности данных: если внешний зависит от внутреннего (т. Е. Внутреннего вложенного в внешний), вы никогда не захотите продолжать работу после внутреннего отката. Если это не так, внешний не зависит от внутреннего. В этом случае вложенные транзакции являются неправильным инструментом для вашей задачи. С рефакторингом вы обычно можете получить желаемый результат лучше: используйте последовательные транзакции (не вложенные), превентивные проверки (если внутренняя пройдет) и т. Д. – Arkaine55