आपके पास एक डेटा प्रकार है जिसे आप अलग-अलग नामों से बुला रहे हैं। यह थोड़ा भ्रमित करने वाला है। हालांकि इसे पहले कोड के साथ काम करने के लिए आपको अपने कस्टम डीबीकॉन्टेक्स्ट क्लास में निम्नलिखित धाराप्रवाह कॉन्फ़िगरेशन की आवश्यकता है:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<user>().
HasMany(c => c.Buddies).
WithMany().
Map(
m =>
{
m.MapLeftKey("user_id");
m.MapRightKey("buddy_id");
m.ToTable("buddies");
});
}
यह मानते हुए कि आपका उपयोगकर्ता वर्ग इस तरह दिखता है:
[Table("user")]
public class user
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public virtual List<user> Buddies { get; set; }
}
यदि आप उपरोक्त विधि का उपयोग करते हैं तो आपके पास मौजूद प्रत्येक उपयोगकर्ता ऑब्जेक्ट में नेविगेशन प्रॉपर्टी . होगी उस पर दोस्त कहा जाता है। उपयोगकर्ताओं के लिए क्वेरी करते समय आप मित्र उपयोगकर्ताओं को उत्सुक करना चाहते हैं , करो:
context.users.Include("Buddies")
इसके अलावा, कई पाठकों के साथ अपनी समस्या का समाधान करने के लिए। ऐसा इसलिए है क्योंकि आपने क्वेरी की गणना नहीं की है (db.users) आपके पहले लूप से। इसे संबोधित करने के लिए आप इस तरह की क्वेरी की गणना कर सकते हैं:
var users = context.users.Include("Buddies").ToList();
foreach(var user in users)....
और यदि आप ऊपर दिए गए कॉन्फ़िगरेशन का उपयोग करते हैं, तो आपको आईडी का मिलान करने का प्रयास करने की आवश्यकता नहीं है, आप बस दोस्तों नेविगेशन प्रॉपर्टी का उपयोग करके उपयोगकर्ता से मित्रों की सूची (शून्य फ़ील्ड यदि नया है) प्राप्त करते हैं। (वर्चुअल, आलसी लोडेड), करें:
user.Buddies
जैसा कि आप देख सकते हैं कि आपको वास्तव में 'मॉडल.बडी' की आवश्यकता नहीं है (क्योंकि इसमें केवल एक आईडी मैपिंग है) इकाई ढांचा लिंकिंग का ख्याल रखेगा। हालाँकि यदि आप हमेशा अपनी उपयोगकर्ता क्वेरी में दोस्तों को शामिल नहीं कर रहे हैं तो आप तालिका चाहते हैं। LINQ के साथ निम्नलिखित तरीके से पूछताछ की जाएगी:
var userBuddies = db.buddies.Where(buddy=>buddy.user_id == user.id).ToList();
//An enumerated list of user buddies
//do stuff