Я пишу тест на інтеграцію, де я буду вставляти в базу даних деякі об'єкти, а потім перевіряю, чи мій метод отримує ці об’єкти.
Моє підключення до бази даних здійснюється через NHibernate ... і моїм звичайним методом створення такого тесту було б зробити наступне:
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();
Однак я нещодавно дізнався про TransactionScope, який, мабуть, може бути використаний саме для цієї мети ...
Деякі з прикладів коду я знайшов це в такий спосіб :
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;
}
Я вважаю, що якщо я не включатиму рядок txScope.Complete()
, то введені дані будуть повернуті назад. Але , до жаль , я не розумію , як це можливо ... як же txScope
об'єкт зберегти трек deptAdapter
і empAdapter
об'єктів та їх операції по базі даних.
Мені здається, мені тут не вистачає трохи інформації ... чи я дійсно в змозі замінити свої BeginTransaction()
та RollbackTransaction(
) дзвінки, оточуючи мій код за допомогою TransactionScope
?
Якщо ні, як тоді TransactionScope
працює на відкат транзакцій?