Como o TransactionScope reverte as transações?

Estou escrevendo um teste de integração em que inserirei vários objetos em um banco de dados e depois verifico se meu método recupera esses objetos.

Minha conexão com o banco de dados é através do NHibernate ... e meu método usual de criar esse teste seria o seguinte:

NHibernateSession.BeginTransaction();

//use nhibernate to insert objects into database
//retrieve objects via my method
//verify actual objects returned are the same as those inserted

NHibernateSession.RollbackTransaction();

No entanto, descobri recentemente sobreTransactionScope que aparentemente pode ser usado para esse fim ...

Algunscódigo de exemplo que encontrei é o seguinte:

public static int AddDepartmentWithEmployees(Department dept)
{

    int res = 0;

    DepartmentAdapter deptAdapter = new DepartmentAdapter();
    EmployeeAdapter empAdapter = new EmployeeAdapter();
    using (TransactionScope txScope = new TransactionScope())
    {

        res += deptAdapter.Insert(dept.DepartmentName);
        //Custom method made to return Department ID 
        //after inserting the department "Identity Column"
        dept.DepartmentID = deptAdapter.GetInsertReturnValue();
        foreach(Employee emp in dept.Employees)
        {

            emp.EmployeeDeptID = dept.DepartmentID;
            res += empAdapter.Insert(emp.EmployeeName, emp.EmployeeDeptID);

        }
        txScope.Complete();

    }
    return res;

}

Eu acredito que se eu não incluir a linhatxScope.Complete() que os dados inseridos serão revertidos. Mas infelizmente não entendo como isso é possível ... como é que otxScope objeto manter um controle dodeptAdapter eempAdapter objetos e suas transações no banco de dados.

Sinto que estou perdendo um pouco de informação aqui ... sou realmente capaz de substituir meuBeginTransaction() eRollbackTransaction() chama cercando meu código usandoTransactionScope?

Se não, como entãoTransactionScope trabalhar para reverter transações?

questionAnswers(2)

yourAnswerToTheQuestion