用于递归关系的流利Nhibernate

本文关键字:Nhibernate 递归 关系 用于 | 更新日期: 2023-09-27 17:51:16

我有一个表示department的对象。Department可以包含多个Employee和一个SubDepartment。Employee可以包含多个Employee for employees。我如何用Fluent NHibernate来表示这种关系呢?Domain类看起来像这样:

public class Department : Entitybase
{
    public int Id;
    public string DepartmentName;
    public List<Employee> Employees;
    public Department SubDepartment;
}
public class  Employee : EntityBase
{
    public int Id;
    public string Name;
    public List<Employee> Subordinates
}

和我的数据库表看起来像:

Department Table
   Id: int
   SubDepartmentId : int // a sub department id
   DepartmentName : string

Employee Table
    Id : int
    SuperviserId : int // A Superviser Id
    Name : string
    DepartmentId : int // a department id that contain this employee.

如何创建流畅的nhibernate映射来选择和插入数据到表

用于递归关系的流利Nhibernate

请看看Ayende关于有效选择树的帖子:

http://ayende.com/blog/4151/nhibernate-tips-tricks-efficiently-selecting-a-tree

接下来是地图,据我所知你想要它们

  • DepartmentMap:

要映射部门的员工,您可以这样写。

Map(d => d.Id);
Map(d => d.DepartmentName);
HasMany(d => d.Employees)
.KeyColumn("DepartmentId")
.Cascade.None();

然后,对于subdepartment属性,我不清楚为什么一个部门只有一个子部门。你想把它作为子部门的列表吗?

References(d => d.Subdepartment)
.Column("SubDepartmentId")
.Cascade.All();

当您删除该部门时,最后一个Cascade将删除该子部门

  • EmployeeMap

    Map(e => e. id);Map(e => e. name);有很多(e => e.下级).Column("SuperviserId").Cascade.None ();//如果这是可空的,请查看其他类型的级联,并根据需要修改。