EntityFrameworkCore 單表樹狀結構配置


數據結構

public class TreeNode
{
    [Key]
    public long Id { get; set; }
    public string NodeName { get; set; }
    public long? ParentId { get; set; }
    public virtual TreeNode Parent { get; set; }
    public virtual ICollection<TreeNode> Children { get; set; }

}

配置

//單表樹狀結構
modelBuilder.Entity<TreeNode>()
    //主語this,擁有Children
    .HasMany(x => x.Children)
    //主語Children,每個Child擁有一個Parent
    .WithOne(x => x.Parent)
    //主語Children,每個Child的外鍵是ParentId
    .HasForeignKey(x => x.ParentId)
    //這里必須是非強制關聯,否則報錯:Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
    .OnDelete(DeleteBehavior.ClientSetNull);

數據查詢需要使用延遲加載

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);

或者

    .AddDbContext<BloggingContext>(
        b => b.UseLazyLoadingProxies()
              .UseSqlServer(myConnectionString));

參考資料:
延遲加載

示例代碼

示例代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM