【问题标题】:fluent Nhibernate for a recursive relationship流利的 Nhibernate 用于递归关系
【发布时间】:2013-01-10 22:24:21
【问题描述】:

我有一个代表部门的对象。部门可以包含多个员工和一个子部门。 Employee 可以包含多个 Employee for 下属。我如何用 Fluent NHibernate 表示这种关系。 Domain 类如下所示:

public class Department : Entitybase
{
    public int Id;
    public string DepartmentName;
    public List<Employee> Employees;
    public Department SubDepartment;

}

public class  Employee : EntityBase
{
    public int Id;
    public string Name;
    public List<Employee> Subordinates
}

我的数据库表看起来像:

Department Table
   Id: int
   SubDepartmentId : int // a sub department id
   DepartmentName : string


Employee Table
    Id : int
    SuperviserId : int // A Superviser Id
    Name : string
    DepartmentId : int // a department id that contain this employee.

如何为选择和插入数据创建流畅的休眠映射。

【问题讨论】:

  • 看看你迄今为止提出的映射会很好。您可以将这些添加到问题中吗?

标签: c# fluent-nhibernate


【解决方案1】:

请查看 Ayende 关于有效选择树的帖子:

http://ayende.com/blog/4151/nhibernate-tips-tricks-efficiently-selecting-a-tree

接下来是我知道你想要的地图

  • 部门地图:

为了映射部门中的员工,您可以编写类似这样的内容。

Map(d => d.Id);
Map(d => d.DepartmentName);

HasMany(d => d.Employees)
.KeyColumn("DepartmentId")
.Cascade.None();

然后,对于子部门属性,我不完全了解一个部门如何只有一个子部门。您是否希望将其作为子部门列表?

References(d => d.Subdepartment)
.Column("SubDepartmentId")
.Cascade.All();

当你删除这个部门时,最后一个 Cascade 会删除子部门

  • 员工地图

    地图(e => e.Id); 地图(e => e.Name); HasMany(e => e.下属) .Column("SupervisorId") .Cascade.None(); //如果这是可为空的,请查看其他类型的级联并根据需要进行修改。

【讨论】:

  • 谢谢你的回答,我试试。
  • 实际上,我想用 2 个类来管理所有的下拉列表。我有 DropdownType 和 DropdownList 但有些 DropDownType 与另一个 DropDownType 相关,例如 Country -> States -> City。所以部门类引用DropdownType,员工类引用DropdownList。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多