Bir veritabanına birkaç nesne ekleyeceğim ve ardından yöntemimin bu nesneleri alıp almadığından emin olacağım bir entegrasyon testi yazıyorum.
Veritabanına bağlantım NHibernate üzerinden ... ve böyle bir testi oluşturmak için benim genel yöntemim aşağıdakileri yapmak olacaktır:
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();
Bununla birlikte, son zamanlarda görünüşe göre bu amaç için kullanılabilecek TransactionScope'u öğrendim ...
Bulduğum bazı örnek kodlar aşağıdaki gibidir:
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;
}
İnanıyorum ki txScope.Complete()
, girilen verilerin geri alınacağı satırı dahil etmezsem. Ama ne yazık ki bu yok nasıl ... nasıl mümkün olduğunu anlamıyorum txScope
nesne takip deptAdapter
ve empAdapter
nesneler ve veritabanı üzerinde kendi işlemlerini.
Burada biraz bilgi eksikmişim gibi hissediyorum ... BeginTransaction()
ve RollbackTransaction(
) aramalarımı kodumu kullanarak değiştirebilir TransactionScope
miyim?
Değilse, TransactionScope
işlemleri geri almak için nasıl çalışır?