您的位置:首页 > 其它

code first实现自关联(树结构数据)

2011-12-30 09:36 330 查看
实现自关联数据时,有两点须注意:

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

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

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

一.部门实体:

/// <summary>

/// 部门名

/// </summary>

public string Name { get; set; }

/// <summary>

/// 部门编号

/// </summary>

public string Code { get; set; }

/// <summary>

/// 父级部门ID

/// </summary>

public Guid? ParentId { get; set; }

/// <summary>

/// 部门顺序号(同级)

/// </summary>

public int Order { get; set; }

/// <summary>

/// 父级部门

/// </summary>

public virtual Department ParentDepartment { get; set; }

/// <summary>

/// 当前部门下的员工(不包含子部门的)

/// </summary>

public virtual ICollection<Employee> Employees { get; set; }

/// <summary>

/// 当前部门的子部门(不包含子部门的下级部门)

/// </summary>

public virtual ICollection<Department> ChildrenDepartments { get; set; }

二.实体的映射配置

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

}

一定注意加红色的部分,搞了我好久
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: