मैं एक एकीकरण परीक्षण लिख रहा हूं जहां मैं एक डेटाबेस में कई ऑब्जेक्ट सम्मिलित करूंगा और फिर यह सुनिश्चित करने के लिए जांच करूंगा कि क्या मेरा तरीका उन वस्तुओं को पुनर्प्राप्त करता है।
डेटाबेस से मेरा संबंध 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
वापस लेनदेन को रोल करने के लिए काम करता है ?