Je suis en train d'écrire un test d'intégration où je serai l'insertion d'un certain nombre d'objets dans une base de données, puis de vérifier si ma méthode récupère les objets.
Ma connexion à la base de données est par NHibernate...et ma méthode habituelle de la création d'un tel test serait de faire ce qui suit:
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();
Cependant, j'ai récemment découvert sur TransactionScope qui, apparemment, peut être utilisé à cet effet...
Quelques exemple de code que j'ai trouvé est comme suit:
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;
}
Je crois que si je ne comprend pas la ligne txScope.Complete()
que les données insérées seront annulées. Mais malheureusement je ne comprends pas comment c'est possible... comment l' txScope
objet de garder une trace de l' deptAdapter
et empAdapter
des objets et de leurs transactions sur la base de données.
Je sens que je manque un peu d'informations ici...suis-je vraiment capable de remplacer ma BeginTransaction()
et RollbackTransaction(
) des appels en l'entourant de mon code à l'aide d' TransactionScope
?
Si non, comment ne puis - TransactionScope
travail à faire reculer les transactions?