JoinQueryOver和JoinAlias有什么区别?

我需要知道JoinQueryOver和JoinAlias之间有什么区别,什么时候使用它们?

谢谢。

在function上他们做同样的事情,创build一个连接到另一个实体。 唯一的区别是他们回报。 JoinQueryOver返回一个新的QueryOver,其中当前的实体是join的实体,而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"); 

在function上是一样的。 请注意,第二个查询中明确提到了kittenAlias。

QueryOver系列 – 第2部分:基础知识与Andrew Whitaker的join提供了一个非常好的解释:

概要:

  • IQueryOver是一个带有两个types参数TRootTSubType的genericstypes
  • .SelectTRoot运行,而其他QueryOver方法在TSubTypeTSubType
  • TRoot与构build查询时保持不变,但使用JoinQueryOverjoin时, TSubType发生变化
  • JoinQueryOverJoinAlias将连接添加到您的查询中。 JoinAlias不会更改TSubType ,但JoinQueryOver会。
  • 在构build查询以引用不属于TRootTSubType属性时,可以使用别名