9

डेटाबेस पहला मॉडल का उपयोग करना: मान लीजिए कि हम क्लासिक तालिकाओं Student, Course और StudentCourse (Student और Course के बाद स्पष्ट रूप से होने FKS) करते हैं।क्या इकाई फ्रेमवर्क कई छेड़छाड़ ऑब्जेक्ट के बिना कई रिश्तों को संभाल सकता है?

यदि आप इस मॉडल को ईएफ में आयात करते हैं, तो आप उनमें से प्रत्येक के लिए उत्पन्न ऑब्जेक्ट प्राप्त करेंगे। Student और Course कक्षाओं में प्रत्येक का StudentCourses का संग्रह होगा, जिसमें से आपको क्रमशः Course या Student पर जाने के लिए एक और रिश्ते को कूदने की आवश्यकता है।

मैं अर्थात StudentCourses का संग्रह है, इस तरह से है कि अंतर्निहित चौराहे तालिका अदृश्य है उत्पन्न किया गया कोड करना चाहते हैं, और CourseStudents का संग्रह है। मैंने इसे अन्य ओआरएम सॉफ़्टवेयर में देखा है (विशेष रूप से, TopLink)। क्या यह ईएफ में किया जा सकता है?

+0

तो बस 'table1table2' मॉडल को छूट दें? –

+0

कोड-पहले के साथ यह निश्चित रूप से संभव है, इसलिए मुझे लगता है कि डेटाबेस-पहले के साथ यह संभव है। –

+1

क्या आपके 'StudentCourses' तालिका में कोई अतिरिक्त कॉलम है? यह आलेख सुझाव देता है कि यदि आप ऐसा नहीं करते हैं तो आपको वांछित व्यवहार मिलेगा: http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/ –

उत्तर

9

this tutorial के अनुसार, आपको वांछित व्यवहार मिलेगा यदि आपकी StudentCourse तालिका में केवल विदेशी-कुंजी कॉलम हैं। यदि इसमें कोई अन्य कॉलम है, तो ईएफ शामिल होने का प्रतिनिधित्व करने के लिए एक मध्यवर्ती इकाई उत्पन्न करेगा।

इस मामले में, StudentCourse तालिका से सरोगेट कुंजी छोड़कर इसे एक समग्र प्राथमिक कुंजी के साथ बदलना चाहिए।

+0

जीवन उद्धारकर्ता उत्तर ... – Javier

+2

असल में, जब भी आपके रिश्ते पर अतिरिक्त "विशेषता" होती है, तो आपको ईएफ में अतिरिक्त इकाई मिल जाएगी। आपको सिर्फ "विशेषता" के रूप में सरोगेट कुंजी के बारे में सोचना होगा। सिक्का का दूसरा पक्ष यह है कि यदि आप विशेषताओं को चाहते हैं, तो यह अतिरिक्त इकाई एक जरूरी है। (जॉबटाइट रिलेशनशिप के लिए कर्मचारी के बारे में सोचें, लेकिन ~ रिश्ते में "StartedOnDate" विशेषता है। इस प्रकार आपके पास यह अतिरिक्त इकाई होनी चाहिए। – granadaCoder

-3

आप इसे आईसी कोड में पहले आईसीओलेक्शन का उपयोग करके कर सकते हैं। उदाहरण के लिए:

public class Student 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Course> Courses { get; set; } 

    public Student() 
    { 
     Courses = New HashSet<Course>(); 
    } 
} 

पाठ्यक्रम के लिए दोहराना और इसे सब कुछ स्वैप करें। यह एम-टू-एम रिलेशनशिप के साथ आपके डेटाबेस (छात्र, कोर्स और छात्र कोर्स) में तीन टेबल बनाएगा। सबसे महत्वपूर्ण छात्रवृत्ति एक अदृश्य लिंकिंग टेबल होगी जिसमें आपके मॉडल में कोई इकाई नहीं है।

+0

इसके बारे में वेब पर स्कटलबूट का एक भार है। मैंने पाया सबसे उपयोगी लेख [प्रशांत ब्रॉल] द्वारा किया गया था (http://prashantbrall.wordpress.com/2011/03/23/ef-code- फर्स्ट- प्रबंधन-relationships/)। – markp3rry

+0

सही, जब तक ~ रिश्ते में कोई अतिरिक्त विशेषता नहीं है। रिचर्ड-डीमिंग उत्तर पर मेरी टिप्पणी देखें। – granadaCoder

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