C# 用于层次/树结构表的Fluent Nhinernate映射

C# 用于层次/树结构表的Fluent Nhinernate映射,c#,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我有一个层次结构(树结构)SQL Server表Temploye,包含以下列 Id bigint identity(1,1) not null FirstName nvarhcar(50) not null LastName nvarchar(50) not null ManagerId bignint null 列Id是主键。每个员工都有或有一名经理;如果他/她这样做了,则ManagerId列的值将不再自我引用另一个经理-员工行的值Id。例如,表Temploye的一些条目: 1 John D

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

Id bigint identity(1,1) not null
FirstName nvarhcar(50) not null
LastName nvarchar(50) not null
ManagerId bignint null
列Id是主键。每个员工都有或有一名经理;如果他/她这样做了,则ManagerId列的值将不再自我引用另一个经理-员工行的值Id。例如,表Temploye的一些条目:

1 John Doe    null
2 Jane Smith  1
3 Keith Johnson 1
4 Fox   Lynson  2
5 Kim   McFeinstein 4
...
员工John Doe没有经理。但他是简·史密斯和基思·约翰逊的经理。金·麦克芬斯坦的经理是福克斯·林森

我想知道如何使用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
   ???
}
公共类EmployeeMap:MapClass
{
表(“TEmployee”);
SchemaAction.None();
//不确定以下代码
???
}
公共类员工
{
公共虚拟长Id{get;private set;}
公共虚拟字符串FirstName{get;set;}
公共虚拟字符串LastName{get;set;}
公共虚拟员工管理器{get;set;}
公共虚拟ICollection ManagedEmployees{get;private set;}
}
公共类EmployeeMap:MapClass
{
表(“TEmployee”);
SchemaAction.None();
Id(e=>e.Id).GeneratedBy.HiLow(“1000”);
参考文献(e=>e.Manager,“ManagerId”);
HasMany(e=>e.Manager).KeyColumn(“ManagerId”).Cascade.All();
}

仔细查看问题的答案,并接受回答问题最好的答案。如果没有答案,请添加注释或编辑问题,说明为什么答案不正确,并提供其他信息
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();
}