使用NHibernate QueryOver进行后期评估

时间:2013-01-15 07:29:43

标签: nhibernate queryover

NHibernate.Linq返回IQueryable给了我较晚的评价。这可以用QueryOver完成吗?

更新:

我将用它来定义许多只使用子集的查询。因此,未来不是解决方案,它将全部执行它们。

我喜欢NHibernate.Linq中的IQueryable(IEnumerable)返回类型,如果从未使用过,它将永远不会执行查询。

1 个答案:

答案 0 :(得分:7)

首先,偶数QueryOver只是一组定义,稍后将转换为SQL语句。因此,在您使用

的引用之前
IQueryOver<Entity, Entity> ab = session.QueryOver<Entity>();

而不是调用List<Entity>() ...执行被推迟。这也是你如何使用分离查询16.1. Structure of a Query

QueryOver<Cat> query = QueryOver.Of<Cat>()
        .Where(c => c.Name == "Paddy");

另一个强大功能是Future。这代表了一种非常简单的方法,即如何在堆栈上放置少量查询,并且只有在需要第一个查询时...才会执行所有查询并作为批处理传递给DB Server。在这里阅读更多:NHibernate Futures

  

它们本质上是一种将查询执行推迟到以后的方法   日期,此时NHibernate会有更多关于什么的信息   该应用程序应该做,并相应地优化它

最大的区别在于,使用IQueryable

时无法将其作为QueryOver返回

编辑:扩展问题更新

虽然IQueryable<TEntiy>只能从session.Query<TEntity>()返回,而不能在使用 QueryOver ICriteria HQL 时返回...使用QueryOver时无法达到相同的行为。