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参数TRoot
和TSubType
的genericstypes.Select
在TRoot
运行,而其他QueryOver方法在TSubType
上TSubType
。TRoot
与构build查询时保持不变,但使用JoinQueryOver
join时,TSubType
发生变化JoinQueryOver
和JoinAlias
将连接添加到您的查询中。JoinAlias
不会更改TSubType
,但JoinQueryOver
会。- 在构build查询以引用不属于
TRoot
或TSubType
属性时,可以使用别名