NHibernate में अपवाद से निपटने के लिए सबसे अच्छा अभ्यास क्या है? इस प्रकारहैंडलिंग NHibernate अपवाद
public void Add(Subject subject)
{
using (ISession session = HibernateUtil.CurrentSession)
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(subject);
transaction.Commit();
}
}
और एक यूनिट टेस्ट:
मैं निम्नलिखित के साथ एक SubjectRepository मिल गया है
[Test]
public void TestSaveDuplicate()
{
var subject = new Subject
{
Code = "En",
Name = "English"
};
_subjectRepository.Add(subject);
var duplicateSubject = new Subject
{
Code = "En",
Name = "English1"
};
_subjectRepository.Add(duplicateSubject);
}
मैं इकाई परीक्षण द्वारा उत्पन्न त्रुटि से निपटने में बात करने के लिए मिला है और थोड़ा अटक गया। यह उम्मीद के रूप में विफल रहता है, यद्यपि जेनेरिकैडएक्सप्शन के साथ, मैं एक कॉन्स्ट्रेनटोलियेशन अपवाद या कुछ इसी तरह की अपेक्षा कर रहा था (डेटाबेस स्तर पर विषय कोड पर एक विशिष्टता बाधा है)।
ADOException एक MySQL अपवाद एक समझदार त्रुटि संदेश है कि लपेटता लेकिन मैं सिर्फ भीतरी अपवाद फेंक कर कैप्सूलीकरण तोड़ने शुरू करने के लिए नहीं करना चाहती। विशेष रूप से MySQL को इस प्रोजेक्ट के बैक एंड के रूप में अंतिम रूप दिया नहीं गया है।
आदर्श रूप में मैं अपवाद को पकड़ने और इस बिंदु पर उपयोगकर्ता के लिए एक समझदार त्रुटि वापस करने में सक्षम होना चाहते हैं। क्या NHBernate अपवादों को संभालने और उपयोगकर्ता को वापस रिपोर्ट करने के लिए गलत तरीके से रिपोर्ट करने के लिए कोई दस्तावेजी सर्वोत्तम अभ्यास दृष्टिकोण हैं और क्यों?
धन्यवाद,
मैट
मुझे लगता है कि अपवाद लपेटना भी सबसे अच्छा विकल्प है। आंतरिक अपवाद MySQLException संदेश = "डुप्लिकेट एंट्री 'एन' कुंजी 3 के लिए 'के साथ कुछ है। क्योंकि इसे सीधे सामने के अंत में बुलाया जाएगा, मैं एक सार्थक संदेश वापस करना चाहता हूं। –
क्या यह अच्छा विचार है, सभी अपवादों को पकड़ने और इसे लपेटने के लिए? – VikciaR
यदि आप केवल अपवाद को पुनर्स्थापित कर रहे हैं, तो आप इस कोड में से अधिकांश को हटा सकते हैं - यदि कोई लेनदेन स्पष्ट रूप से प्रतिबद्ध नहीं होता है, तो सत्र बंद होने पर इसे वापस ले जाया जाएगा (या स्पष्ट रूप से यदि प्रतिबद्ध कॉल अपवाद फेंक रहा है तो यह होगा इसे वापस रोल करने का प्रयास करें), इसलिए अपवाद को छोड़ दें और एनएच लेनदेन का ख्याल रखेगा यदि उसने प्रतिबद्ध नहीं किया है - आपको क्लीनर कोड के साथ समान प्रभाव मिलेंगे। –