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();
このソリューションは問題を解決しますが、上記の既存のクエリに外部結合を含む新しいクエリを追加します。「そして、首が一つ切り落とされると、その切り落とされた場所は他の二つの首を生んだ」
アップデート:
この問題は、すべての結合を外部に変更することで解決できます。インナーで出来ますか?