2013-07-26 9 views
6

Mam problem z Entity Framework Code Pierwsze podejście w rozwijaniu hierarchii drzew.Kod EF Najpierw. Kolekcja dla dzieci ma wartość zerową dla rodzica

Potrzebuję przechowywać niektóre drzewa w bazie danych. Moja tabela ma trzy pola Id, Name i Parent_Id. stworzyłem następujące klasy w moim rozwiązanie:

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; } 
} 

Dodałem następującą konfigurację TreeNode klasy

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

Problem jest, że dzieci zawsze ma wartość null, gdy zwracany przez EF.

Ale jeśli pobrać jakiś węzeł podrzędny, uzyskać jego węzeł nadrzędny za pomocą właściwości rodzica, wówczas właściwość Dzieci jest wypełniona poprawnie.

Nie jestem pewien, co jest nie tak. Szukam twojej rady.

Aktualizacja: dodanie modyfikatora do wirtualnego właściwości nawigacyjnych nie pomogło

Odpowiedz

7

właściwości znaczników albo jako virtual, jak sugeruje @Cuong. Umożliwi to leniwy załadunku (za każdym razem, gdy będziesz próbować uzyskać dostęp do dodatkowych Dzieci zapytanie do serwera zostanie wykonany):

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

OR dzieci chętnie obciążenia podczas ładowania nadrzędny:

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

Dzięki. Nawet z właściwościami wirtualnymi Dzieci nie są zwracane. – lostaman

+0

@lostaman upewnij się, że włączone jest leniwy-ładowanie dla kontekstu 'context.Configuration.LazyLoadingEnabled = true;' –

+0

Dzięki @lazyberezovsky. Mam tę opcję ustawioną na false. Zmieniłem go na prawdziwy i teraz pojawia się błąd "Jest już otwarty obiekt DataReader skojarzony z tym poleceniem, który musi zostać zamknięty jako pierwszy" podczas próby dostępu do kolekcji Dzieci. – lostaman

Powiązane problemy