我有一个代表Deparment的对象。部门可以包含许多员工和一个子部门。员工可以包含许多下属员工。如何用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映射。
答案 0 :(得分:0)
请查看Ayende关于有效选择树的帖子:
http://ayende.com/blog/4151/nhibernate-tips-tricks-efficiently-selecting-a-tree
接下来是我理解你想要的地图
为了映射部门中的员工,您可以编写类似这样的内容。
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的
地图(e =&gt; e.Id); 地图(e =&gt; e.Name); HasMany(e =&gt; e.Subordinates) .COLUMN( “SuperviserId”) .Cascade.None(); //如果这是可以为空的,请查看其他级联级别并根据需要进行修改。