2

JoinAlias を使用して Eager fetch を行うにはどうすればよいですか? 次のクエリがあります。

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

それが私が必要とするものです。しかし、関連するエンティティ (既に結合されている) の 1 つにアクセスしようとすると、Nhibernateは新しい遅延クエリを作成します。これを防ぐ方法は?

各関係にこれを追加できます:

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

このソリューションは問題を解決しますが、上記の既存のクエリに外部結合を含む新しいクエリを追加します。「そして、首が一つ切り落とされると、その切り落とされた場所は他の二つの首を生んだ」

アップデート:

この問題は、すべての結合を外部に変更することで解決できます。インナーで出来ますか?

4

1 に答える 1