5

मेरे पास एक जटिल इकाई है जो किसी विशेष डेटाबेस तालिका में रिकॉर्ड खोने पर सहेजी नहीं जाएगी। जब रिकॉर्ड मौजूद होता है तो इकाई सही ढंग से बचाती है। गणना के साथ इस SqlParameterCollection = के लिएइस एसक्यूएल पैरामीटर के लिए अमान्य इंडेक्स एन गणना = एन केवल तभी जब संबंधित तालिका में शून्य रिकॉर्ड

अमान्य इंडेक्स एन एन

गूगल के जरिये पाया समाधान का एक गुच्छा और स्टैक ओवरफ़्लो पर सबसे निकट से संबंधित प्रश्नों को पढ़ने के बाद: रिकॉर्ड मैं अपवाद प्राप्त नहीं होता है जब :

मेरा मानना ​​है कि मेरे मुद्दे को मेरे मैपिंग फाइल सेटअप के तरीके से करना है। ग्राहक इकाई व्यक्ति इकाई का संदर्भ है। व्यक्ति एक टेबल पर नक्शा करता है जिसे हमने पढ़ा है, लेकिन पहुंच नहीं लिखता है। ऐसा तब होता है जब व्यक्ति इकाई के लिए एक रिकॉर्ड मौजूद नहीं है कि मैं अपवाद उत्पन्न करता हूं। अगर रिकॉर्ड कोई मुद्दा नहीं है। मैंने ग्राहक से व्यक्ति को संदर्भ Nullable() पर सेट कर दिया है। मैंने यह सुनिश्चित करने के लिए भी दो बार जांच की है कि मेरे पास किसी भी इकाई से दो बार मैप की गई संपत्ति नहीं है।

ग्राहक

//more mapping code... 
References(x => x.Person, "snl_id").Nullable(); 
//more mapping code... 

व्यक्ति

//more mapping code... 
ReadOnly(); 
Id(x => x.SnlId).Column("SNL_ID"); 
//more mapping code... 

आगे मामलों को मुश्किल करने के लिए:

यहाँ मैं उचित मैपिंग जानकारी है क्या लग रहा है, लेकिन अधिक प्रदान कर सकते हैं की जरूरत के रूप में है जब व्यक्ति व्यक्ति होता है तो NHibernate बेहतर प्रदर्शन करने के लिए हमारे पास कुछ दर्दनाक कोड है अस्तित्व में नहीं है। मुझे यकीन नहीं है कि यह यहां लागू होता है, लेकिन मुझे लगता है कि यह मेरे प्रश्न में शामिल करने के लिए काफी प्रासंगिक है। हम नीचे दिए गए कोड का उपयोग कर रहे हैं क्योंकि इसके बिना एनएचबीरनेट जेआईआरए कई प्रश्नों का निर्माण करेगा। यह समाधान इस Stack Overflow answer में उल्लिखित है।

ग्राहक के व्यक्ति संपत्ति

public virtual Person Person 
{ 
    get 
    { 
     try 
     { 
      var snlId = per.Name; 
      return per; 
     } 
     catch 
     { 
      return null; 
     } 
    } 
    set 
    { 
     per = value; 
    } 
} 

private EPerson per; 

मैं अपने मैपिंग में क्या याद आ रही है कि इस अपवाद का कारण होता है? क्या इस समस्या का एक और टुकड़ा है जिसे मैं नहीं देख रहा हूं?

उत्तर

2

जबकि ग्राहक वर्ग से snl_id संपत्ति को हटाने का स्कॉट का समाधान इस समस्या को हल करता है, जिससे समस्याएं उत्पन्न होती हैं जिन्हें मैं नहीं प्राप्त कर सकता ---- ग्राहक तालिका में snl_id मौजूद हो सकता है, यहां तक ​​कि संबंधित व्यक्ति तालिका रिकॉर्ड भी नहीं है। चूंकि ऐसा ही मामला है जब मुझे snl_id तक पहुंच की आवश्यकता होगी जब मैं संबंधित व्यक्ति संपत्ति के माध्यम से इसे प्राप्त नहीं कर सकता।

मैंने कई वैकल्पिक समाधानों पर विचार किया लेकिन कस्टमर टेबल प्राथमिक कुंजी और ग्राहक तालिका से snl_id सहित ग्राहक तालिका का दृश्य बनाने पर बस गया। फिर दृश्य में शामिल होने के माध्यम से उस संपत्ति का मानचित्रण।

Join("v_cust_id_snl_id", j => j.KeyColumn("cust_id").Map(x => x.SnlId, "snl_id") 

इस परिवर्तन ने मुझे अपना केक रखने और इसे खाने की अनुमति दी। मैं ग्राहक पर SnlId संपत्ति रखने में सक्षम था, लेकिन सहेजते समय अपवाद फेंक नहीं था।

1

क्या आपके पास ग्राहक में संपत्ति के रूप में संदर्भित स्निप_आईडी है और साथ ही बच्चे के ऑब्जेक्ट की प्राथमिक कुंजी भी है? यदि ऐसा है, तो यह आपको प्राप्त होने वाली त्रुटि का कारण बन रहा है। ग्राहक से संपत्ति निकालें और मूल्य प्राप्त करने के लिए व्यक्ति का उपयोग करें।

संबंधित मुद्दे