用于递归关系的流利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映射来选择和插入数据到表
请看看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 ();//如果这是可空的,请查看其他类型的级联,并根据需要修改。