2014-12-15 14 views
5

शामिल हों मैं इकाई की रूपरेखा 6 उपयोग कर रहा हूँ कोड पहले से है, और मैं निम्नलिखित संरचना के साथ एक मेज है:इकाई की रूपरेखा स्व

public class Item 
{ 
    [Key] 
    public int ItemId { get; set; } 

    [Required] 
    [MaxLength(255)] 
    public string Name { get; set; }} 

    public Item Parent { get; set; } 
    public virtual List<Item> Children { get; set; }  
} 

मुझे पता करना चाहते हैं तो यह किसी एक क्वेरी/यात्रा पर प्राप्त करना संभव है डेटाबेस के लिए, Items रूट तक मेरे पेड़ में, itemId को तर्क के रूप में आपूर्ति करते हुए।

उदाहरण के लिए मुझे सभी माता-पिता ItemId 55 से कोई माता-पिता नहीं मिलने तक दें।

+3

मुझे नहीं लगता कि यह संभव है है। संभवतः संग्रहीत प्रो के साथ एक रिकर्सिव सीटीई को मैप करना होगा। – GraemeMiller

+0

यहां @GraemeMiller को प्रतिबिंबित करना: मुझे हाल ही में कुछ ऐसा करना पड़ा, और इस तरह मैंने इसे समाप्त कर दिया। – IronMan84

उत्तर

0

आप सभी माता-पिता को किसी भी सैन कोड का उपयोग करके एक यात्रा में नहीं मिल सकते हैं।

लेकिन अगर आप कुछ इस तरह कर सकते हैं: https://stackoverflow.com/a/11565855/304832

अपने इकाई थोड़ा संशोधित करके, आप 2 व्युत्पन्न संग्रह जोड़ सकते हैं:

public class Item 
{ 
    [Key] 
    public int ItemId { get; set; } 

    [Required] 
    [MaxLength(255)] 
    public string Name { get; set; }} 

    public virtual Item Parent { get; set; } // be sure to make this virtual 
    public virtual List<Item> Children { get; set; } 

    public virtual ICollection<ItemNode> Ancestors { get; set; } 
    public virtual ICollection<ItemNode> Offspring { get; set; } 
} 

आप इस काम करने के लिए एक नई कंपनी शुरू करने की क्या ज़रूरत है हालांकि, जो इस प्रकार है:

public class ItemNode 
{ 
    public int AncestorId { get; set; } 
    public virtual Item Ancestor { get; set; } 

    public int OffspringId { get; set; } 
    public virtual Item Offspring { get; set; } 

    public int Separation { get; set; } // optional 
} 

अब, अगर आप

चाहते

सभी माता पिता Itemid 55 से जब तक कोई माता पिता

पाया जाता है ... आप कुछ इस तरह कर सकते हैं:

IEnumerable<Item> allParentsFrom55 = dbContext.Set<Item>() 
    .Find(55).Ancestors.Select(x => x.Ancestor); 
संबंधित मुद्दे