JoinQueryOverとJoinAliasの違いは何ですか?


88

JoinQueryOverとJoinAliasの違い、およびそれぞれをいつ使用するかを知る必要がありますか?

回答:


108

機能的には同じことを行い、別のエンティティへの結合を作成します。唯一の違いは、彼らが返すものです。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が明示的に参照されていることに注意してください。


7
2番目の例ではKitten kittenAlias = null;Cat catAlias = null;以前のエイリアスを宣言する必要があることに注意してください。散らかっていますので、JoinAlias必要でない限り使用しません。
foka

これを明確にしてくれて@fokaに感謝します。私はこれを逃し、なぜうまくいかないのかと思っていました。
Mario Tacke

12

QueryOverシリーズ-パート2:基本とAndrew Whitakerによる参加が非常に良い説明をしています:

概要:

  • IQueryOver2つの型パラメーターTRootを持つジェネリック型であり、TSubType
  • .Select上で動作しTRoot、他のQueryOver方法は上で動作しながらTSubType
  • TRootクエリを構築しているのと同じ残りますが、TSubType変更あなたが使用して結合JoinQueryOver
  • JoinQueryOverそしてJoinAliasaddはあなたのクエリに結合します。JoinAlias変わりませんがTSubType、変わりJoinQueryOverます。
  • クエリを作成するときにエイリアスを使用して、属していないプロパティを参照しTRootたり、TSubType
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.