एडीओ.NET डेटासेट और डेटा एडाप्टर का उपयोग कर ऑटो वृद्धिशील आईडी के साथ आप एक डेटाबेस तालिका में पेड़ संरचना को कैसे बनाते हैं

मेरे पास एक आत्म-रेफरेंसियल रोल टेबल है जो पेड़ की संरचना का प्रतिनिधित्व करती है

ID [INT] AUTO INCREMENT
Name [VARCHAR]
ParentID [INT]

मैं इस तालिका में मूल्यों को लोड और सहेजने के लिए एक ADO.NET डेटाटेबल और डेटा एडाप्टर का उपयोग कर रहा हूं। यह काम करता है अगर मैं केवल मौजूदा पंक्तियों के बच्चे बना देता हूं। अगर मैं एक बच्चे की पंक्ति बना देता हूं, तो उस बच्चे का बच्चा बनाओ, फिर अद्यतन करें, डेटाटेबल द्वारा उत्पन्न अस्थायी आईडी मान पेरेंट आईडी कॉलम में जा रहा है। मेरे पास निम्न डेटा संबंध सेट है:

dataset.Relations.Add(New DataRelation("RoleToRole",RoleTable.Columns("ID"), RoleTable.Columns("ParentID")))

और जब मैं डेटाटेबल में नई बाल पंक्तियां बनाता हूं तो मैं SetParentRow विधि को कॉल करता हूं

newRow.SetParentRow(parentRow)

जब मैं DataAdapter पर अद्यतन कॉल करता हूं तो आईडी पीढ़ी को पुन: प्रसारित करने के लिए मुझे कुछ खास करना पड़ता है?

0
ro fr bn

3 उत्तर

यदि आप जाते हैं तो इससे कोई फर्क पड़ता है

newRow.SetParentRow(parentRow, RoleTable.Relations("RoleToRole"))
0
जोड़ा

मैं विशेष रूप से ADO.net नहीं जानता, लेकिन अधिकांश ओआरएम स्वचालित रूप से किसी रिश्ते में नए रिकॉर्ड की आईडी नहीं डाल पाएंगे। आपको 2-चरणीय प्रक्रिया का सहारा लेना होगा:

  1. अभिभावक बनाएं और सहेजें
  2. बच्चे को रिश्ते के साथ बच्चे के साथ बनाएं और सहेजें

कारण यह है कि ओआरएम के लिए यह मुश्किल है क्योंकि आपके पास परिपत्र निर्भरता हो सकती है, और यह नहीं पता कि पहले के लिए आईडी बनाने के लिए उसे किस ऑब्जेक्ट की आवश्यकता है। कुछ ओआरएम उन रिश्तों को समझने के लिए काफी समझदार हैं जहां ऐसी परिपत्र निर्भरताएं नहीं हैं, लेकिन अधिकांश नहीं हैं।

0
जोड़ा
एडीओ.NET माता-पिता को डेटासेट में बच्चे को धक्का देने के लिए पर्याप्त स्मार्ट है, जब कोई विदेशी कुंजी बाधा सेट होता है तो माता-पिता को अपडेट किया जाता है - इसलिए आपको बच्चे के सामने माता-पिता को सहेजने की आवश्यकता होती है लेकिन आपके द्वारा बनाए जाने से पहले माता-पिता को जरूरी नहीं बचाते जुड़ा हुआ बच्चा स्वयं रेफरेंसियल की कोशिश नहीं की।
जोड़ा लेखक Murph, स्रोत

मेरा सुझाव है कि आप एक विदेशी केकस्ट्रेनट जोड़ें, अपडेटर्यूल को कैस्केड पर सेट करें।

0
जोड़ा