JoinQueryOverとJoinAliasの違いと、それぞれをいつ使用するかを知る必要がありますか?
39039 次
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による基本と参加は非常に良い説明を与えます:
概要:
IQueryOver
2つの型パラメーターを持つジェネリック型でTRoot
あり、TSubType
.Select
で動作しTRoot
、他のQueryOverメソッドはで動作しTSubType
ます。TRoot
クエリを作成しているときと同じですが、TSubType
を使用して参加すると変更されますJoinQueryOver
JoinQueryOver
クエリに結合をJoinAlias
追加します。JoinAlias
変更されませんがTSubType
、変更さJoinQueryOver
れます。TRoot
またはに属していないプロパティを参照するクエリを作成するときにエイリアスを使用できます。TSubType
于 2014-09-03T10:30:12.747 に答える