流畅的Nhibernate映射/连接

本文关键字:连接 映射 Nhibernate | 更新日期: 2023-09-27 17:49:29

在我的代码中,我有三个主要实体:1. 公司2. 工作人员3.位置

一个员工可以在不同的公司担任多个职位。

我想检索与特定公司相关的所有员工。

在代码中,我将这样做:
public partial class Company
{
    public virtual IEnumerable<Position> Positions { get; protected set; }
    public virtual IEnumerable<Staff> Staffs
    {
        get { return Positions.Select(x => x.Staff); }
    }
}
class CompanyMap : ClassMap<Company>
{
    public CompanyMap()
    {
        Id(x => x.Id)
            .Column("CompanyId")
            .GeneratedBy.Identity();
        Map(x => x.Name)
            .Not.Nullable();
        HasMany(x => x.Positions)
            .KeyColumn("CompanyId")
            .AsBag();
    }
}

Pb:在这个解决方案中,我将加载与公司相关的所有职位,然后加载与每个职位相关的所有员工…就性能而言,我想它不是很好……

我很确定在CompanyMap类中直接执行此连接有更好的方法。

你能帮我做这件事吗?

谢谢你,Sebastien

流畅的Nhibernate映射/连接

如何改变数据模型?似乎Staff总是在给定Company水平的给定Position集合中。这建议使用以下模型

public partial class Staff
{
   public virtual IEnumerable<CompanyPosition> Positions { get; protected set; }
}
public class Position
{
  //...
}
public class Company
{
 //...
}
public class CompanyPosition
{
  public virtual Company Company   {get;set;}
  public virtual IEnumerable<Position> {get;set;}
}

有了这个,你可以做直接的映射,你的查询最终类似于这个

var data = session.Query<Staff>().Where(s=>s.CompanyPosition.Company == company);