我有一个分层(树结构)SQL Server表TEmployee,其中包含以下列
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
...
员工John Doe没有经理。但他是Jane Smith和Keith Johnson的经理。 Kim McFeinstein的经理是Fox Lynson。
我想知道如何使用Fluent NHibernate映射编写域模型类和映射类。另外,我想在映射类代码时,知道级联删除的好方法。换句话说,如果我删除John Doe,那么它的所有子项(由John Doe管理的员工)也将被递归删除。
请帮忙。谢谢。
Domain Model Class但我不确定其源代码:
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 :(得分: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();
}