Nhibernate QueryOver。渴望使用JoinAlias获取

时间:2013-02-12 10:51:29

标签: nhibernate queryover

如何使用JoinAlias进行Eager提取? 我有以下查询:

QueryOver<Ticket>()
    .JoinAlias(ticket => ticket.Agent, () => agent)
    .JoinAlias(ticket => ticket.Activities, () => activity)
    .Left.JoinAlias(ticket => ticket.BusinessUnit, () => unit) .... 
    .List<Ticket>();

我需要这个连接用于复杂的过滤逻辑,这对于这个问题并不重要。此查询生成此类SQL:

FROM
       Requests.Ticket this_ INNER JOIN Requests.TicketsActivity activity2_
       ON this_.ID
          = 
          activity2_.TicketId
                             INNER JOIN Support.Agent agent1_
       ON this_.AgentID
          = 
          agent1_.ID
                             LEFT OUTER JOIN Requests.BusinessUnit unit3_
       ON this_.BusinessUnitId
          = 
          unit3_.ID

那就是我需要的。但是当我尝试访问其中一个相关实体(已经加入)时,Nhibernate 会生成一个新的延迟查询。怎么预防这个?

我可以为每个关系添加:

QueryOver<Ticket>().Fetch(ticket => ticket.Activities).Eager.Future();

此解决方案解决了该问题,但添加了具有外连接的新查询到上述现有连接。 “当一个人的头被切断时,它被切断的地方会出现另外两个人”

更新

可以解决问题,将所有连接更改为外部。可以用内在的吗?

1 个答案:

答案 0 :(得分:1)

我以前遇到过这种情况,我不相信它是设计的,因为我从来没有得到任何真正的解释。

请参阅this

我认为我们现在仍然坚持这一点。