Я пишу интеграционный тест, в котором я буду вставлять несколько объектов в базу данных, а затем проверять, извлекает ли мой метод эти объекты.
Я подключаюсь к базе данных через 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
работает для отката транзакций?