0

У меня есть иерархический (древовидной структуры) таблица TEmployee SQL Server со следующими столбцамисвободный Nhinernate отображения для иерархической/древовидной структуры таблицы

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

Идентификатор столбца является первичным ключом. Каждый сотрудник имеет или имеет менеджера; если он/она делает, то значение столбца 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 нет менеджера. Но он менеджер Джейн Смит и Кейт Джонсон. Менеджером Ким МакФейнстайном является Фокс Линсон.

Я хотел бы знать, как написать класс модели домена и класс отображения, используя отображение Fluent NHibernate. Кроме того, я бы хотел, чтобы в кодах классов отображения был полезен способ каскадного удаления. Другими словами, если я удалю Джона Доу, то все его дети (сотрудники, управляемые Джоном Доу) также будут удалены рекурсивно.

Пожалуйста, помогите. Спасибо.

домена класса модели, но я не уверен, что его исходные коды:

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 ??? 
} 

класс Mapping, но я не уверен, что его исходники тоже:

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

 Смежные вопросы

  • Нет связанных вопросов^_^