90

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

4

2 に答える 2

111

機能的には同じことを行い、別のエンティティへの結合を作成します。唯一の違いは、彼らが返すものです。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");

機能的には同じです。kittenAliasが2番目のクエリで明示的に参照されていることに注意してください。

于 2011-03-24T14:33:57.210 に答える
14

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

概要:

  • IQueryOver2つの型パラメーターを持つジェネリック型でTRootあり、TSubType
  • .Selectで動作しTRoot、他のQueryOverメソッドはで動作しTSubTypeます。
  • TRootクエリを作成しているときと同じですが、TSubTypeを使用して参加すると変更されますJoinQueryOver
  • JoinQueryOverクエリに結合をJoinAlias追加します。JoinAlias変更されませんがTSubType、変更さJoinQueryOverれます。
  • TRootまたはに属していないプロパティを参照するクエリを作成するときにエイリアスを使用できます。TSubType
于 2014-09-03T10:30:12.747 に答える