0

我具有分层(树结构)SQL Server表TEmployee与下面的列流利Nhinernate映射分层/树结构表

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

列标识是主键。每位员工都有或有一位经理;如果他/她这样做,则他/她自己的列ManagerId的值引用另一个经理员工行的值Id。 For Instance some table for TEmployee:

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

员工John Doe没有经理。但他是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 
    ??? 
} 
+0

FIRO,谢谢你非常。 – user1219702

+0

看看你的问题的答案,并接受回答你的问题的最好的答案。如果没有人会将您引导至解决方案,请添加提交或编辑问题以说明为何它不回答并提供其他信息 – Firo

回答

1
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(); 
}