여러 개체를 데이터베이스에 삽입 한 다음 내 메서드가 해당 개체를 검색하는지 확인하는 통합 테스트를 작성 중입니다.
데이터베이스에 대한 내 연결은 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()
and RollbackTransaction(
) 호출 을 대체 할 수 TransactionScope
있습니까?
그렇지 않은 경우 TransactionScope
트랜잭션을 롤백 하는 방법은 무엇입니까?