JoinQueryOver和JoinAlias有什么区别?

问题描述 投票:86回答:2

我需要知道JoinQueryOver和JoinAlias有什么区别,以及何时使用它们?

nhibernate queryover
2个回答
106
投票

在功能上,它们执行相同的操作,创建另一个实体的联接。唯一的区别是它们的回报。 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。


10
投票

QueryOver Series - Part 2: Basics and Joining by Andrew Whitaker提供了一个很好的解释:

摘要:

  • [IQueryOver是具有两个类型参数TRootTSubType]的泛型类型>
  • [.SelectTRoot上运行,而其他QueryOver方法在TSubType上运行。
  • [TRoot]与建立查询相同,但是当您使用TSubType进行加入时,JoinQueryOver会发生变化>
  • JoinQueryOverJoinAlias将联接添加到查询中。 JoinAlias不变TSubType,但JoinQueryOver不变。
  • [构建查询时,您可以使用别名来引用不属于TRootTSubType的属性
© www.soinside.com 2019 - 2024. All rights reserved.