2013-07-26 4 views
6

के लिए शून्य है, मुझे वृक्ष पदानुक्रम विकसित करने में एंटिटी फ्रेमवर्क कोड प्रथम दृष्टिकोण के साथ समस्या है।ईएफ कोड पहले। बच्चों का संग्रह माता-पिता

मुझे डेटाबेस में कुछ पेड़ स्टोर करने की आवश्यकता है। मेरी तालिका में तीन फ़ील्ड आईडी, नाम और Parent_Id हैं।

public class TreeNode 
{ 
    public TreeNode() 
    { 
     Children = new List<TreeNode>(); 
    } 

    public int Id { get; set; } 

    [Required] 
    public String Name { get; set; } 

    public virtual IList<TreeNode> Children { get; set; } 

    public virtual TreeNode Parent { get; set; } 
} 

मैं TreeNode वर्ग

  modelBuilder.Entity<TreeNode>().HasOptional(c => c.Parent) 
        .WithMany(c => c.Children) 
        .Map(m => m.MapKey("Parent_Id")); 

मुद्दा यह है कि बच्चे हमेशा अशक्त जब एफई द्वारा दिया है के लिए निम्नलिखित विन्यास जोड़ दिया है: मैं अपने समाधान में निम्नलिखित वर्ग बनाया।

लेकिन अगर कुछ बच्चे नोड को पुनः प्राप्त करें, तो माता-पिता की संपत्ति के माध्यम से अपने माता-पिता नोड प्राप्त करें, तो बच्चों की संपत्ति सही ढंग से भर दी गई है।

मुझे यकीन नहीं है कि यहां क्या गलत है। आपकी सलाह खोज रहे हैं।

अद्यतन: नेविगेशन गुण के लिए आभासी संशोधक की इसके अलावा, virtual के रूप में मदद नहीं की

उत्तर

7

या तो निशान गुण के रूप में @Cuong का सुझाव दिया।

var nodes = context.TreeNodes.Include(n => n.Children); 
+0

धन्यवाद:

public virtual IList<TreeNode> Children { get; set; } 

या उत्सुक लोड बच्चों जब जनक लोड हो रहा है: यह आलसी लोडिंग (हर बार जब आप सर्वर से बच्चे अतिरिक्त क्वेरी का उपयोग करने के निष्पादित किया जाएगा कोशिश करेंगे) सक्षम हो जाएगा। वर्चुअल गुणों के साथ भी बच्चे वापस नहीं आते हैं। – lostaman

+0

@ लोस्टमान सुनिश्चित करें कि संदर्भ 'संदर्भ के लिए आलसी लोडिंग सक्षम है। कॉन्फ़िगरेशन। LazyLoadingEnabled = true; ' –

+0

धन्यवाद @lazyberezovsky। मेरे पास यह विकल्प गलत पर सेट है। मैंने इसे सही में बदल दिया और अब मुझे एक त्रुटि मिल रही है "बच्चों के संग्रह तक पहुंचने का प्रयास करते समय पहले से ही एक बंद डेटा रीडर इस कमांड से जुड़ा हुआ है जिसे पहले बंद किया जाना चाहिए"। – lostaman

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