जब मैं autofac का उपयोग मैं एक ही कंटेनर scoped विधि का उपयोग करें, लेकिन इसके बजाय मेरी भंडार/डीएओ वस्तुओं के लिए एक ही सत्र में उत्तीर्ण होने की मैं एक UnitOfWork कंटेनर है कि scoped गुजरती हैं। काम की इकाई इस निर्माता में है।
private readonly ISession _session;
private ITransaction _transaction;
public UnitOfWork(ISession session)
{
_session = session;
_transaction = session.BeginTransaction();
}
और निपटाने है:
public void Dispose()
{
try
{
if (_transaction != null &&
!_transaction.WasCommitted &&
!_transaction.WasRolledBack)
_transaction.Commit();
_transaction = null;
}
catch (Exception)
{
Rollback();
throw;
}
}
मैं कर रहा हूँ (ab) इस का प्रबंधन करने के क्रम में autofac में नियतात्मक निपटान सामान का उपयोग कर, और अच्छी तरह से मैं इन सबसे छुटकारा पाना पसंद है।
दूसरी बात यह है कि मैं मूल रूप से केवल एएसपीनेट पर्यावरण को लक्षित कर रहा हूं और एक सचेत निर्णय लेता हूं कि एक लेनदेन वेब अनुरोध से जुड़ा हुआ है। तो एक वेब अनुरोध पैटर्न प्रति लेनदेन।
इस कारण से मैं यह त्रुटि एक IHttpModule में कोड से निपटने कर सकते हैं:
void context_Error(object sender, System.EventArgs e)
{
_containerProvider.RequestContainer.Resolve<IUnitOfWork>().Rollback();
}
मैं NHibernate.Burrow पर एक नज़र भी बारीकी से नहीं लिया है, लेकिन मुझे यकीन है कि वहाँ कुछ वहाँ सबसे करता है हूँ इस का।
मुझे समाधान पसंद है। हालांकि, एक और सवाल यह है कि मैं किस तरीकों को लागू कर सकता हूं [लेनदेन]? इस http://nhprof.com/Learn/Alert?name=DoNotUseImplicitTransactions के मुताबिक ऐसा लगता है कि मेरे पास सत्र होने पर हमेशा लेनदेन होना चाहिए, हालांकि इस समाधान के लिए मुझे सत्र में हर जगह [लेनदेन] मैन्युअल रूप से जोड़ने की आवश्यकता होती है। –
संशोधित संस्करण की जांच करें। आपको शायद पता चलेगा कि इसे वहां से कैसे संशोधित किया जाए। आप [लेनदेन] विशेषता को पूरी तरह से छोड़ सकते हैं और हमेशा लेनदेन शुरू कर सकते हैं। यह तुम्हारी पसंद है। मुझे विशेषता की आवश्यकता थी, क्योंकि कभी-कभी मुझे अलग-अलग लेनदेन में 2 चीजें करने की ज़रूरत होती थी। मैंने इसे ऐसा किया: // कोई लेनदेन विशेषता सार्वजनिक आभासी शून्य कॉल यह() { ट्रांस 1(); // ट्रांस 2(); // करता } [लेन-देन] सार्वजनिक आभासी शून्य Trans1() {} [लेन-देन] सार्वजनिक आभासी शून्य Trans2() {} – dmonlord
आप दो लेनदेन के लिए उपयोग के मामले समझा सकते हैं? यह महत्वपूर्ण है क्योंकि अगर मुझे एक समान उपयोग केस भी मिल सकता है, तो मैं समस्या को अलग-अलग देखूंगा। –