流利的Nhibernate映射/加入

时间:2015-05-18 09:27:27

标签: c# nhibernate fluent-nhibernate

在我的代码中,我有三个主要实体: 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

1 个答案:

答案 0 :(得分:0)

如何改变数据模型?似乎Staff始终位于给定Position级别的给定Company集合中。这表明以下模型

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