मुझे एनएचबर्ननेट के साथ काम करते समय एक TooManyRowsAffectedException मिला है और मैंने TooManyRowsAffectedException with encrypted triggers जैसे विभिन्न बैचर इंजेक्शन करके या SET NOCOUNT चालू करने के लिए डेटाबेस में ट्रिगर्स को संशोधित करके (इसके बाद से इसका उपयोग नहीं कर सकता) मैं डेटाबेस को संशोधित नहीं करना चाहता - यह एक साथ सौ से अधिक तालिकाओं के साथ बहुत जटिल है और मैं इसके साथ गड़बड़ नहीं करना चाहता क्योंकि अन्य अनुप्रयोग इसका उपयोग करते हैं)। मुझे समझ में नहीं आता कि यह अपवाद क्यों होता है। मैं बस इतना करता हूं कि मेरे पास एक नमूना वस्तु है जिसे मैंने दो मानों को देखा है, और यदि मान दिए गए मानदंडों के साथ फिट होते हैं, तो मैंने नमूना सेट किया है। 'पंक्ति' को 'Y' में चलाया गया है (हमारे डेटाबेस में सभी बूलियन का प्रतिनिधित्व किया जाता है चार वाई या एन)। कोड बहुत आसान है:NHibernate को कैसे बताना है कि एक ट्रिगर दूसरी तालिका अपडेट करता है?
IQueryable<Sample> samples = session.Query<Sample>().Where(s => s.Value == desiredValue);
foreach (Sample sample in samples)
{
sample.IsDone = 'Y';
session.Flush(); // Throws TooManyRowsAffectedException
}
session.Flush(); // Throws TooManyRowsAffectedException
फ़्लश कॉल फेंकता है कि क्या मैं इसे लूप के अंदर या बाहर रखता हूं। क्या कुछ ऐसा है जो मैं गलत कर रहा हूं या क्या यह केवल डेटाबेस के तरीके से संबंधित है? मैंने Flush() से पहले नमूना पर SaveOrUpdate() को कॉल करने का प्रयास किया, लेकिन यह कुछ भी नहीं बदला। मुझे पता है कि मैं इस अपवाद के आसपास काम कर सकता हूं, लेकिन मैं समस्या के स्रोत को समझना पसंद करूंगा।
नोट: अपवाद में यह मुझे बताता है कि वास्तविक पंक्ति गणना 2 है और अपेक्षित 1 है। यह 2 पंक्तियों को क्यों अपडेट करता है क्योंकि मैं केवल 1 पंक्ति बदलता हूं?
आपकी मदद के लिए धन्यवाद!
संपादित करें:
मैं पता लगाने के लिए कि उस का कारण कंटेनर तालिका (कंटेनर नमूने होते हैं) जब नमूना अद्यतन किया जाता है में एक पंक्ति को अद्यतन करने के डेटाबेस में एक ट्रिगर है क्योंकि वहाँ है कर रहा था। क्या NHibernate को कॉन्फ़िगर करने का कोई तरीका है ताकि यह इस ट्रिगर के बारे में जानता हो और उम्मीद की जा सके कि पंक्तियों की सही संख्या अपडेट हो जाए?
मैं फ्लुएंट एनएचबेर्नेट का उपयोग नहीं कर रहा हूं, क्या आप जानते हैं कि यह NHibernate सेटिंग्स में कहां लागू होता है? मैं यह नहीं समझ सकता कि मुझे कहां लिखना चाहिए (मैं किसी भी क्लासमैप का उपयोग नहीं करता हूं, न ही मुझे पता है कि यह क्या है, और मैंने एसक्लइन्सर्ट या जैसे कार्यों को नहीं देखा है)। – Carl
कृपया मेरे उत्तर में संपादन देखें। उम्मीद है कि आप हाथ से एचबीएम नहीं बना रहे हैं। लेकिन यदि हैं, तो निश्चित रूप से देखें कि Fluent NHibernate या NHibernate 3.0 में नई धाराप्रवाह मैपिंग क्षमता आपके लिए क्या कर सकती है। –
इसके लिए धन्यवाद। हां, मैं हाथ से एचबीएम बना रहा हूं लेकिन अब यह कोई समस्या नहीं है (मुझे नहीं लगता कि यह विशेष रूप से कठिन है)। – Carl