Ниже показан концептуальный взгляд на то, как можно использовать точку сохранения:
// Старт транзакции.
SqlTransaction tran = con.BeginTransaction();
// (Включить и выполнить некоторые команды в транзакции.)
// Пометить точку сохранения.
tran.Save("CompletedInsert");
// (Включить и выполнить еще некоторые команды в транзакции.)
// Если необходимо, откатить до точки сохранения.
tran.Rollback("CompletedInsert");
// Зафиксировать или откатить всю транзакцию.
tran.Commit();
Обратите внимание, как используется метод Rollback() с точкой сохранения в качестве параметра. Если вы хотите откатить всю транзакцию, просто пропустите этот параметр.
Совет. При откате транзакции до точки сохранения все точки сохранения, определенные после данной, теряются. Если они нужны, придется установить их заново.
Точки сохранения позволяют организовать транзакцию в виде последовательности действий, которые могут быть отменены индивидуально. Вложенные транзакции играют по сути ту же роль, что и точки сохранения — они позволяют вам начинать более мелкие транзакции внутри более крупных, и фиксировать или откатывать их индивидуально. Чтобы инициировать вложенные транзакции, нужно вызвать метод Begin() объекта Transaction. Это возвращает новый объект Transaction, который вы используете точно так же, как исходный.
Реализация вложенных транзакций зависит от источника данных. Некоторые источники данных, такие как SQL Server, не поддерживают правильно вложенные транзакции. В SQL Server откат вложенной транзакций в действительности откатывает всю транзакцию. По этой причине метод Begin() не предусмотрен в классе SqlTransaction. Вместо него вы можете использовать точки сохранения для аналогичной функциональности.
По большей части модель провайдеров ADO.NET — идеальное решение для работы с различными источниками данных. Она позволяет каждому производителю баз данных разрабатывать родные, оптимизированные решения, обеспечивая высокую степень согласованности, так что квалифицированным разработчикам не придется переучиваться.
предыдущая следующая страница оглавление
331