2011-02-26 10 views
39

मैं सभीस्वत: संदर्भ में कई-से-अनेक पुनरावर्ती संबंध कोड पहले इकाई की रूपरेखा

class Member 
{ 
    public virtual IList<Member> Friends { get; set; } 
    [Key] 
    public int MemberId { get; set; } 
    public string Name{ get; set; } 
} 

मैं मैपिंग लेकिन व्यर्थ जोड़ने की कोशिश की पर यह काम करने के लिए नहीं कर पा रहे। क्या सीटीपी 5 के साथ ऐसा करने का कोई तरीका है?

+0

मुझे नहीं लगता कि यह पहले कोड से संबंधित है लेकिन [इस पोस्ट] को जांचें (http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/05198b97-f178-49ba-91da-7a2516a9ad8d) बाहर। –

उत्तर

56

परंपरा के मुताबिक, कोड पहले कई लोगों के लिए एक के रूप में uni-दिशात्मक संघों का समय लगेगा।

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Member>().HasMany(m => m.Friends).WithMany(); 
} 

नोट:: इसलिए आप धाराप्रवाह एपीआई का उपयोग करने संहिता सबसे पहले जानते हैं कि आप कई आत्म संदर्भित संघ के लिए एक कई करना चाहते हैं यह बताने के लिए की जरूरत है वहाँ CTP5 में एक ज्ञात बग में शामिल होने आप अनुकूलित नहीं दूँगी कि है इस परिदृश्य में तालिका कॉलम नाम।

+2

मोर्टेज़ा, मैं यहां और आपके ब्लॉग पर आपका अनुसरण कर रहा हूं। यह बेकार ढंग से काम करता है! हालांकि परिणामी तालिका का नाम [सदस्य सदस्य] नाम दिया गया है जो अजीब है लेकिन इसे आरटीएम में तय किया जाएगा। धन्यवाद दोस्त! – Korayem

+0

हैलो, मुझे यह जानने की ज़रूरत है कि हम एकाधिक आत्म संदर्भ का उपयोग कैसे कर सकते हैं। उदाहरण के लिए एक ही नमूना कोड पर; सार्वजनिक आभासी IList दोस्त {प्राप्त करें; सेट; } सार्वजनिक वर्चुअल IList माता-पिता {प्राप्त करें; सेट; } –

+0

यह पूरी तरह से काम किया, धन्यवाद। क्या आप जानते हैं कि किसी भी कई टेबल का नाम निर्दिष्ट करना है? सदस्य सदस्य काम ठीक काम करता है, लेकिन यह बदसूरत लग रहा है। –

0

आपका उदाहरण कई से अधिक रिश्ते नहीं है, यह एक पुनरावर्ती संबंध है।

मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए। लेकिन आपके कोड के साथ समस्या यह है कि आपकी इच्छा एक ही पंक्ति के साथ एक ही पंक्ति पर दो फ़ील्ड प्राप्त करेगी। दोस्त की आईडी के लिए पंक्ति आईडी और सदस्य आईडी के लिए सदस्य आईडी।

संपादित

इस तरह यह कर का प्रयास करें:

class Member 
    { 
     [Key] 
     public int MemberId { get; set; } 
     public string Name { get; set; } 

     public virtual IList<FriendRelationship> Friends { get; set; } 

    } 

    class FriendRelationship 
    { 
     [Key] 
     public int RelationshipId { get; set; } 

     public Member Friend { get; set; } 
    } 
+0

मेरे लिए यह कई से अधिक हो सकता है क्योंकि इसे [Left] [LeftMemberId] और [RightMemberId] के साथ एक तालिका [मित्र] पेश करके हल किया जा सकता है। सही नामकरण के बावजूद, मैं इसे काम पर नहीं ला सकता :( – Korayem

+0

थैंक्स साथी, मुझे आपके समाधान का प्रयास करने में कोई बदलाव नहीं आया, लेकिन यह मैन्युअल रूप से करने का मेरा प्रारंभिक समाधान था। आरटीएम की प्रतीक्षा नहीं कर सकता :) – Korayem

2

आप मॉडल-फर्स्ट का उपयोग करके ईएफ 4 सीटीपी 5 में काम करने के लिए इसे प्राप्त कर सकते हैं, लेकिन सीटीपी 5 कोड फर्स्ट में ऐसे परिदृश्यों के लिए कोड फर्स्ट का उपयोग करने के लिए स्वयं-रेफरेंसियल और पॉलिमॉर्फिक क्वेरी कॉन्फ़िगरेशन के साथ बहुत अधिक बग हैं। मोर्टेज़ा मनावी (अन्य उत्तर देखें) ने उनमें से कई को अपने ब्लॉग पर दस्तावेज किया है।

+0

यह सच है। आशा है कि आरटीएम हमारे अनुरोधों को पूरा करेगा। कोड-पहला बस कमाल है! – Korayem

16

अगर मैं सही आप इस कोड के साथ कई तालिका नाम के लिए कई प्रभावित कर सकते हैं हूँ:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Member>().HasMany(m => m.Friends).WithMany().Map(m => 
     { 
      m.MapLeftKey("MemberId"); 
      m.MapRightKey("FriendId"); 
      m.ToTable("MembersFriends"); 
     } 
    ); 
} 

आशा है कि यह मदद करता है।

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