流利的Nhinernate映射分层/树结构表

本文关键字:结构 分层 映射 Nhinernate | 更新日期: 2023-09-27 18:37:25

我有一个分层(树结构)SQL Server 表,包含以下列

Id bigint identity(1,1) not null
FirstName nvarhcar(50) not null
LastName nvarchar(50) not null
ManagerId bignint null

列 ID 是主键。每个员工都有或有一个经理;如果他/她这样做,则他/她的自我 ManagerId 列的值将引用另一个经理员工行的值 ID。例如,表TEmployee的一些条目:

1 John Doe    null
2 Jane Smith  1
3 Keith Johnson 1
4 Fox   Lynson  2
5 Kim   McFeinstein 4
...

员工约翰·多伊没有经理。但他是Jane Smith和Keith Johnson的经理。Kim McFeinstein的经纪人是Fox Lynson。

我想知道如何使用Fluent NHibernate映射编写域模型类和映射类。另外,我想在映射类的代码中了解级联删除的好方法。 换句话说,如果我删除John Doe,那么它的所有子项(由John Doe管理的员工)也将递归删除。

请帮忙。 谢谢。

域模型类,但我不确定其源代码:

public class Employee
{
   public virtual long Id {get;set;}
   public virtual string FirstName {get;set;}
   public virtual string LastName {get;set;}
   public virtual Employee  Manager {get;set;}  // not sure here ???
}

映射类,但我也不确定它的源代码:

public class EmployeeMap : MapClass<Employee>
{
   Table("TEmployee");
   SchemaAction.None();
   // not sure about following codes
   ???
}

流利的Nhinernate映射分层/树结构表

public class Employee
{
   public virtual long Id {get; private set;}
   public virtual string FirstName {get;set;}
   public virtual string LastName {get;set;}
   public virtual Employee Manager {get;set;}
   public virtual ICollection<Employee> ManagedEmployees {get; private set;}
}
public class EmployeeMap : MapClass<Employee>
{
   Table("TEmployee");
   SchemaAction.None();
   Id(e => e.Id).GeneratedBy.HiLow("1000");
   References(e => e.Manager, "ManagerId");
   HasMany(e => e.Manager).KeyColumn("ManagerId").Cascade.All();
}