zoukankan      html  css  js  c++  java
  • code first实现自关联(树结构数据)

    实现自关联数据时,有两点须注意:

    1.外键字段必须设置为可为空的值类型(如int?;Guid?等)

    2.设置映射时不能级联删除,要设置WillCascadeOnDelete(false)

    二话不说了,直接来代码:

    一.部门实体:

    /// <summary>
            
    /// 部门名
            
    /// </summary>
            public string Name { getset; }

            /// <summary>
            
    /// 部门编号
            
    /// </summary>
            public string Code { getset; }

            /// <summary>
            
    /// 父级部门ID
            
    /// </summary>
            public Guid? ParentId { getset; }

            /// <summary>
            
    /// 部门顺序号(同级)
            
    /// </summary>
            public int Order { getset; }

            /// <summary>
            
    /// 父级部门
            
    /// </summary>
            public virtual Department ParentDepartment { getset; }

            /// <summary>
            
    /// 当前部门下的员工(不包含子部门的)
            
    /// </summary>
            public virtual ICollection<Employee> Employees { getset; }

            /// <summary>
            
    /// 当前部门的子部门(不包含子部门的下级部门)
            
    /// </summary>
            public virtual ICollection<Department> ChildrenDepartments { getset; }

    二.实体的映射配置

    public class DepartmentEntityConfig:EntityTypeConfiguration<Department>
        {
            #region 成员变量

            #endregion

            #region 构造函数

            public DepartmentEntityConfig()
            {
                this.HasKey(d => d.Id);

                this.Property(d => d.Name)
                    .IsRequired()
                    .HasMaxLength(50);

                this.Property(d => d.Code)
                    .IsRequired()
                    .HasMaxLength(10);

                this.Property(d => d.Order)
                    .IsRequired();

                this.Property(d => d.ParentId)
                    .IsOptional();

                this.HasOptional(d => d.ParentDepartment)
                    .WithMany(c => c.ChildrenDepartments)
                    .HasForeignKey(d => d.ParentId)
                    .WillCascadeOnDelete(false);
                   

                this.ToTable("Department");
            }

            #endregion

            #region 属性

            #endregion

            #region 方法

            #endregion
        }

     一定注意加红色的部分,搞了我好久

  • 相关阅读:
    sqlite语法
    java 多态性
    Jekyll Bootstrap初始
    2019年 八年级下册期中总结
    2019年 八年级下册期中总结
    【洛谷P1415】拆分数列【dp】
    【洛谷P1415】拆分数列【dp】
    【洛谷P1197】星球大战【并查集】
    【洛谷P1197】星球大战【并查集】
    【P1261】服务器储存信息问题【最短路】
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/2306958.html
Copyright © 2011-2022 走看看