JoinQueryOverとJoinAliasの違いと、それぞれをいつ使用するかを知る必要がありますか?
ありがとう。
機能的には同じことを行い、別のエンティティへの結合を作成します。唯一の違いは、返されるものです。 JoinQueryOverは、現在のエンティティを結合した新しいQueryOverを返し、JoinAliasは、現在のエンティティを元のルートエンティティとして持つ元のQueryOverを返します。
どちらを使用するかは個人的な好みの問題です:( http://nhibernate.info/doc/nh/en/index.html#queryqueryover から)
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver<Kitten>(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
そして
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
機能的には同じです。 2番目のクエリでkittenAliasが明示的に参照されていることに注意してください。
QueryOverシリーズ-パート2:Andrew Whitakerによる基本と参加 は非常に良い説明を提供します:
概要:
IQueryOver
は、2つの型パラメーターTRoot
およびTSubType
を持つジェネリック型です.Select
はTRoot
で動作し、他のQueryOverメソッドはTSubType
で動作します。TRoot
はクエリを作成するときと同じですが、TSubType
を使用して参加するとJoinQueryOver
が変わりますJoinQueryOver
およびJoinAlias
は、クエリに結合を追加します。JoinAlias
はTSubType
を変更しませんが、JoinQueryOver
は変更します。TRoot
またはTSubType
に属さないプロパティを参照するクエリを作成するときにエイリアスを使用できます