使用NHibernate QueryOver进行后期评估

Sti*_*tig 3 nhibernate queryover

NHibernate.Linq返回IQueryable给我后期评估.这可以用QueryOver完成吗?

更新:

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

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

Rad*_*ler 7

首先,甚至QueryOver只是一组定义,以后转换为SQL语句.所以,直到你正在使用对a的引用

IQueryOver<Entity, Entity> ab = session.QueryOver<Entity>();
Run Code Online (Sandbox Code Playgroud)

而不是调用List<Entity>()......执行被推迟.这也是你如何使用Detached查询16.1.查询的结构

QueryOver<Cat> query = QueryOver.Of<Cat>()
        .Where(c => c.Name == "Paddy");
Run Code Online (Sandbox Code Playgroud)

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

它们本质上是一种将查询执行推迟到以后日期的方法,此时NHibernate将获得有关应用程序应该执行的操作的更多信息,并相应地对其进行优化

最大的区别是它不能像IQueryable使用时那样返回QueryOver

编辑:扩展问题更新

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