我需要知道JoinQueryOver和JoinAlias之间有什么区别,以及何时使用它们?
感谢。
答案 0 :(得分:103)
在功能上他们做同样的事情,创建一个到另一个实体的连接。唯一的区别是他们的回归。 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。
答案 1 :(得分:10)
QueryOver Series - Part 2: Basics and Joining by Andrew Whitaker给出了一个非常好的解释:
要点:
IQueryOver
是一种通用类型,包含两个类型参数TRoot
和TSubType
.Select
在TRoot
上运行,而其他QueryOver方法在TSubType
上运行。- 加入时
TRoot
与您构建查询时保持一致,但使用TSubType
JoinQueryOver
会发生变化JoinQueryOver
和JoinAlias
为您的查询添加联接。JoinAlias
不会更改TSubType
,但JoinQueryOver
会更改。{/ li>- 您可以在构建查询时使用别名来引用不属于
TRoot
或TSubType
的属性