3

다음 문제로 도와주세요. 내가EntityFramework 코드 첫 번째 및 원형 일대 다 참조

public class TopicItem 
{ 
    public TopicItem() 
    { 
     _children = new List<TopicItem>(); 
    } 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public int? ParentId { get; set; } 
    public TopicItem Parent { get; set; } 
    public List<TopicItem> Children { get; set; } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<TopicItem>().HasKey(t => t.Id); 
    modelBuilder.Entity<TopicItem>().Property(t => t.Title).IsRequired(); 
    modelBuilder.Entity<TopicItem>().Property(t => t.Alias); 
    modelBuilder.Entity<TopicItem>().HasOptional(t => t.Parent).WithMany(t => t.Children).HasForeignKey(t => t.ParentId); 
    //modelBuilder.Entity<TopicItem>().HasMany(t => t.Children).WithOptional(t => t.Parent).HasForeignKey(t => t.ParentId); 
    base.OnModelCreating(modelBuilder); 
} 

유창

처럼 클래스가 있지만 작동하지 않습니다. 다음과 같이 사용하려고합니다 :

public void Recursion(List<TopicItem> items) 
{ 
    if (items != null) 
    { 
     foreach (var item in items) 
     { 
      Process(item); 
     } 
     Recursion(item.Children); 
    } 
} 

Recursion(MyContext.TopicItems.Where(t => t.Parent == null).ToList()) 

각 부모 엔티티에 대한 children 속성은 null입니다.

할 수 있습니까?

답변

2

당신은 모두 ParentChildrenvirtual 게으른 로딩을 지원해야하거나 (이 데이터베이스에 쿼리 정말 많은 트리거 할 수 있습니다) 또는 명시 적 열망로드를 사용하여 어린이를로드 EF을 알려야합니다. 열심히로드하는 것의 문제는 재귀 적으로 작동하지 않는다는 것입니다. EF를 말할 때만 많은 레벨을로드 할 것입니다.

EF 및 그 쿼리 메커니즘은 재귀 관계 (트리 구조)에 적합하지 않습니다.