我需要知道 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 在第二个查询中是如何被明确引用的。
于 2011-03-24T14:33:57.210 回答
14
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
会。- 您可以在构建查询时使用别名来引用不属于
TRoot
或TSubType
于 2014-09-03T10:30:12.747 回答