2012-10-30 14 views
8

एंटीटी फ्रेमवर्क 5.0 कोड मौजूदा डेटाबेस के साथ पहले जोड़ें। रिवर्स ने बिजली उपकरण के साथ कक्षाओं को इंजीनियर किया। सब कुछ अच्छा काम कर रहा है। डेटाबेस में दो टेबल हैं। एक माता-पिता और एक बच्चा विदेशी कुंजी के साथ मूल आईडी पर वापस। आईडी ऑटो वृद्धि के साथ सभी int हैं। मैंने कई अभिभावक रिकॉर्ड जोड़े हैं और अब विशिष्ट अभिभावकों को बाल रिकॉर्ड जोड़ना चाहते हैं। ऐसा करने का एकमात्र तरीका यह है कि माता-पिता की मेज को किसी नाम या किसी अन्य संपत्ति के लिए खोजकर उचित आईडी आईडी मिलती है और आईडी लौटाती है। फिर बच्चे को जोड़ते समय विदेशी कुंजी संपत्ति में उस आईडी का उपयोग करें। मैं एक नए माता-पिता को क्रेट नहीं करना चाहता हूं, क्या यह एक मौजूदा माता-पिता को बच्चा जोड़ने का एकमात्र तरीका है? सभी इंटरनेट उदाहरण एक नए माता-पिता को जोड़ने के साथ-साथ एक बच्चे को मौजूदा माता-पिता में नहीं जोड़ते हैं। किसी भी मदद की सराहना की जाएगीइकाई फ्रेमवर्क - चाइल्ड एंटिटी

+0

संबंधित इकाई सेट करने के लिए आप या तो नेविगेशन प्रॉपर्टी को मूल इकाई में सेट करते हैं या आप विदेशी कुंजी सेट करते हैं। यदि आप आईडी जानते हैं और आपके पास माता-पिता के पास केवल विदेशी कुंजी नहीं है। यदि आपके पास मूल वस्तु है तो नेविगेशन प्रॉपर्टी सेट करें। यदि आप आईडी नहीं जानते हैं और न ही माता-पिता की वस्तु है तो आप कैसे जानते हैं कि बच्चे की इकाई किस माता-पिता से संबंधित है? – Pawel

+0

मुझे एक उदाहरण के साथ प्रयास करने दें। मान लीजिए कि मूल इकाई शिक्षकों है और मेरे पास बॉब, जूली और डेव डीबी में हैं। बाल इकाई कई वर्ग संबंधों के लिए एक शिक्षक के साथ कक्षाएं होती है। मैं जूली को एक कक्षा जोड़ना चाहता हूं लेकिन मेरे पास उसकी प्राथमिक आईडी नहीं है क्योंकि जब मैंने उसे प्रवेश किया था तो इसे कुछ दिन पहले स्वचालित रूप से बनाया गया था। तो, क्या मुझे "जूली" के लिए शिक्षकों के नाम की संपत्ति खोजनी चाहिए और उसकी प्राथमिक आईडी वापस करनी चाहिए और फिर इसे नई कक्षा विदेशी कुंजी के रूप में उपयोग करना चाहिए? – user1626137

+0

जूली की पहचान करने का एकमात्र तरीका आईडी का उपयोग करना है। इसका कारण यह है कि आईडी हमेशा अनोखी होती है क्यों नाम नहीं है। आप 'context.Teachers.First (t => t.Name == "जूली") जैसे कोड का उपयोग कर डेटाबेस से इकाई को ला सकते हैं और आईडी या संदर्भ का उपयोग कर सकते हैं। संबंध स्थापित करने का कोई और तरीका नहीं है क्योंकि आप नहीं जानते कि रिश्ते को क्या सेट करना है। यह भी ध्यान रखें कि इस दौरान जूली हटा दी गई हो सकती है। – Pawel

उत्तर

22

"जूली" (लर्मन) ईएफ की बात करते समय हमारे शिक्षकों में से एक होता है। जैसा कि वह अपनी पुस्तक डीबीकॉन्टेक्स्ट में बताती है कि माता-पिता-बाल संघ में दो गुण, दो नेविगेशन गुण (माता-पिता। बच्चे, बच्चे। माता-पिता) और एक विदेशी कुंजी संपत्ति (बच्चा। माता-पिता) शामिल हो सकते हैं। आप इनमें से किसी एक या उनके कोड में किसी भी संयोजन को सेट कर सकते हैं।

जब एफई परिवर्तन का पता लगाने के लिए शुरू हो रहा है (उदाहरण के लिए जब SaveChanges शुरू हो जाती है) यह एक प्रक्रिया बुलाया संबंध Fixup सुनिश्चित करता है कि तीन गुण सिंक में रहेंगे शुरू होता है।

  1. child.Parent = parentObject:

    तो आपके पास तीन विकल्प एक माता पिता के लिए एक बच्चे इकाई जोड़ने के लिए मिल गया है। मूल वस्तु डेटाबेस से पहले प्राप्त की जानी चाहिए।

  2. parentObject.Children.Add(child)। डेटाबेस से पूर्व-मौजूदा मूल ऑब्जेक्ट की भी आवश्यकता है।
  3. child.ParentId = parentId, जिसके लिए आपको केवल आईडी को जानने की आवश्यकता है। आप जिस आईडी को सुझाए गए हैं, वैसे ही आप आईडी प्राप्त कर सकते हैं, लेकिन साथ ही, जिन वस्तुओं को आप जानते हैं उन्हें हटाया नहीं जाएगा, आप इसे कुछ चर में सहेज सकते हैं ताकि इसे लेन-देन में पुन: उपयोग किया जा सके।

पहले दो विकल्पों के साथ बच्चे ऑब्जेक्ट को मैन्युअल रूप से संदर्भ में जोड़ने की आवश्यकता नहीं है। ईएफ यह देखने के लिए पर्याप्त जानता है कि यह नया है। तीसरे विकल्प के साथ इसे context.Children में SaveChanges से पहले जोड़ा जाना होगा।

+0

मैंने इसे उत्तर के रूप में चिह्नित किया है और Pawel की टिप्पणी को भी इंगित किया है जो दोनों मेरी धारणा की पुष्टि करते हैं कि मुझे बच्चे को जोड़ने से पहले मूल इकाई या कम से कम मूल आईडी की आवश्यकता है। अनुलेख मेरे पास जूली की किताबें और उदाहरण हैं जो एंटीटी फ्रेमवर्क सीखते समय एक बड़ी मदद कर चुके हैं। – user1626137

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