Nhibernate 3.2 Query与QueryOver

时间:2012-01-15 11:10:10

标签: linq nhibernate

最近,我们已将nHibernate更新为3.2。 现在,我们为编写查询添加了两个新选项 - Query(LINQ)或QueryOver(iCriteria)。

从我读到的内容来看,QueryOver专注于nHibernate,而且功能更强大 查询。 另一方面,LINQ是通用的,如果明天我改变我的ORM,我的查询仍然是 他们是。我使用LINQ的另一个重要原因是,在LINQ上我找到了更多的文档 和示例而不是QueryOver。

实际上,我更喜欢使用LINQ,我想确保没有关键原因我不应该这样做。

提前致谢,

2 个答案:

答案 0 :(得分:9)

你交换你的ORM的可能性非常小。

QueryOver和Query都有它们的优点和缺点。

但NH的好处是你可以轻松地在任何查询功能之间轻弹。在我工作的地方,我们使用QueryOver(主要),Query,HQL以及有时直接SQL的混合。

虽然来自NH的许多LINQ查询很容易转换为EF,LightSpeed或您选择的ORM,但是有一整堆NH特定的LINQ,例如Fetching,它们内置在LINQ提供程序中,这将使在任何时候换掉ORM。

有时,QueryOver查询将生成比Query更好的SQL,反之亦然,因此只需使用您喜欢的内容并在执行时分析查询,以确保生成的SQL有效。

答案 1 :(得分:3)

就目前而言,遗憾的是两者都有其局限性,nHibernate团队需要做很多工作来匹配Linq2SQL的表现力,而大多数查询都可以在其中运行。

大多数时候我使用Linq(Query),但它在相对简单的查询上有一些意想不到的问题,这些查询涉及分组和一些微妙的错误(比如byte? {{臭名昭着的“无效演员” 3}})。切换到标准api(QueryOver)通常会有所帮助。

就目前(3.2)而言,不可能直接推荐。我会坚持使用Linq,在遇到问题时暂时切换到标准,并且在将来版本中删除错误和限制时,您可以返回并尝试将所有内容重写为Linq,因为它应该作为主要查询语言。

相关问题