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?