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
}
一定注意加红色的部分,搞了我好久
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
}
一定注意加红色的部分,搞了我好久
相关文章推荐
- ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)
- Entity Framework Code First实体关联数据加载
- Entity Framework Code First 修改数据结构
- Entity Framework Code First实体关联数据加载
- Entity Framework Code First实体关联数据加载
- ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.
- EF Code First 数据表关联
- 数据结构——顺序表实现(c语言)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- java实现tree型的数据结构
- 数据结构7: 循环链表(约瑟夫环)的建立及C语言实现
- EF Code First:实体映射,数据迁移,重构(1)
- 【java基础 4】树形结构数据呈现的非递归算法(循环)实现
- 软件设计师教程 数据结构之线性链表的实现 (C/C++语言)
- 数据结构:实验六(单循环链表实现链式队列)
- 数据结构之——用C++实现算术表达式求值
- C++数据结构——二叉搜索树迭代器的实现
- 数据结构之---c语言实现单链表
- 数据结构(C实现)------- 图的邻接表表示
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现