zoukankan      html  css  js  c++  java
  • 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));

    参考资料:
    延迟加载

    示例代码

    示例代码

  • 相关阅读:
    Javascript 与 c# 数据加密互通 DEC
    Auto.js 隐藏日志信息、定时器
    Auto.js 检测开启无障碍
    Auto.js 初学碰到的坑
    SmartAssembly 汉化说明
    espcms 表结构说明
    处理器调度
    进程死锁与避免
    并发程序设计
    Mysql性能调优
  • 原文地址:https://www.cnblogs.com/luomingui/p/11964990.html
Copyright © 2011-2022 走看看