Saya sedang menulis tes integrasi di mana saya akan memasukkan sejumlah objek ke dalam database dan kemudian memeriksa untuk memastikan apakah metode saya mengambil objek tersebut.
Koneksi saya ke database adalah melalui NHibernate ... dan metode saya yang biasa untuk membuat tes semacam itu adalah dengan melakukan hal berikut:
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();
Namun, baru-baru ini saya mengetahui tentang TransactionScope yang ternyata dapat digunakan untuk tujuan ini ...
Beberapa contoh kode yang saya temukan adalah sebagai berikut:
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;
}
Saya percaya bahwa jika saya tidak menyertakan baris txScope.Complete()
yang disisipkan data akan dibatalkan. Tapi sayangnya saya tidak mengerti bagaimana itu mungkin ... bagaimana txScope
objek melacak deptAdapter
dan empAdapter
objek dan transaksinya di database.
Saya merasa seperti saya kehilangan sedikit informasi di sini ... apakah saya benar-benar dapat mengganti panggilan BeginTransaction()
dan RollbackTransaction(
) dengan melingkupi kode saya menggunakan TransactionScope
?
Jika tidak, lalu bagaimana cara TransactionScope
mengembalikan transaksi?