2017-01-14 1 views
0

Ich habe eine sich selbst referenzierende Tabelle, und ich muss das Datum aus der Tabelle an die Strukturansicht binden. Eltern-Kind. Meine Frage ist, wie Baumansicht aus dieser Tabelle mit Entity Framework mit einem anonymen TypEntity Framework selbst referenziert - Eltern-Kind

einige wie folgt erhalten:

var tree = db.Categories.Select(g => new 

    { 
     id = g.CategoryId, 

     text = g.CategoryName, 

     children = g.children.Select(w => new 
     { 

      id = w.CategoryId, 
      parent = w.ParentCategoryId, 
      text = w.CategoryName, 


     }).ToList(), 


    } 
     ).ToList(); 

Hier ist der Code:

public partial class Category 
    { 

     public Category() 
     { 
      this.children = new HashSet<Category>(); 
     } 

     public int CategoryId { get; set; } 
     public string CategoryName { get; set; } 
     public Nullable<int> ParentCategoryId { get; set; } 

     public virtual ICollection<Category> children { get; set; } 
     public virtual Category Parent { get; set; } 
    } 
+0

Sie haben bereits eine Art von drei Sicht, was genau Sie erreichen möchten? –

+0

@Elias Ich habe den Code bearbeitet. Bitte schau es dir nochmal an. Vielen Dank – Tom

+0

@J. Pichardo .... Ich habe den Code bearbeitet. Bitte schau es dir nochmal an. Vielen Dank – Tom

Antwort

0

Ich nehme an, einen Typen zu schaffen zu Ihrem Zweck, anstatt anonymen Typ und füllen Modell über rekursive Methode.

Diese Lösung gibt es auf Nachteil - jedes Mal, wenn Sie Navigationseigenschaft (Kinder) aufrufen, werden Sie Anfrage an die Datenbank stellen. Wenn Sie es in einer Anfrage machen wollen, und Sie haben nur eine Ebene von verschachtelten Kategorien dann .Include(c => c.Children) genug sonst müssen Sie eine der folgenden Optionen eine Auswahl treffen:

  1. Schreiben Sie einen allgemeinen Tabellenausdruck (CTE) Abfrage Legen Sie sie zur Ansicht oder gespeicherten Prozedur und ordnen Sie sie mit Hilfe von EF zu. Die Rolle von EF ist nicht wirklich groß, weil der schwierigste Teil ist die SQL-Abfrage

  2. Speziell für diese Art von Zweck hat Microsoft SQL Server hierarchyid aber EF unterstützt es nicht von der Box. Es gibt jedoch einige Lösungen: Entity Framework HierarchyId Workarounds

  3. Sie so etwas wie rootId zum Comment Entität hinzufügen können, wenn jedes Kind Wiederholung wird einen Link zu root Kommentar hat. Danach können Sie die gesamte Hierarchie in einer SQL-Abfrage in den Speicher laden und manuell zuordnen. Angesichts der Tatsache, dass die Datenbank ein Engpass ist, wird sie viel schneller sein als eine neue Abfrage für jede Hierarchieebene.

+0

Es hat gut funktioniert! Vielen Dank – Tom

+0

Können Sie mir bitte dabei helfen. Vielen Dank http://stackoverflow.com/questions/41909078/entity-framework-self-referencing-table-how-to-get-parent-until-reach-to-root?noredirect=1#comment70999718_41909078 – Tom

Verwandte Themen