2012-01-15 91 views
1

最近,我们更新了我们的nHibernate到3.2。 现在,我们添加了两个新选项来编写查询 - 查询(LINQ)或QueryOver(iCriteria)。Nhibernate 3.2查询与QueryOver

从我读,QueryOver致力于为NHibernate和功能更强大的复杂 查询。另一方面,LINQ是普遍的,如果明天我改变我的ORM,我的查询就会保持为 。我使用LINQ的另一个重要原因是,在LINQ上我发现了更多的文档 和示例,而不是QueryOver。

其实,我更喜欢使用LINQ,我想肯定是没有关键的原因,为什么我不应该这样做。

由于提前,

+2

您不必在Linq和QueryOver之间进行选择。您可以使用任何一种最适合任何情况的工具。尽管不同的ORM在支持Linq方面存在一些重叠,但它们支持什么以及它们在哪里存在缺陷也存在差异。我个人发现QueryOver非常容易使用,而不需要太多的文档。 – 2012-01-15 12:07:31

回答

2

至于现在,不幸都有其局限性,还有大量的工作要由NHibernate的团队来完成,以配合LINQ2SQL的表现,大多数查询只是工作。

大部分时间我使用Linq(Query),但它具有涉及分组在相对简单的查询,一些意想不到的问题和一些微妙的错误(像byte?https://nhibernate.jira.com/browse/NH-2812臭名昭著的“无效投”)。切换到标准API(QueryOver)通常有帮助。

至于现在(3.2)这是不可能的,然后,得到的直建议。我会坚持使用Linq,当你遇到问题时暂时切换到标准,以及在未来版本中删除错误和限制时,你可以返回并尝试将所有内容重写为Linq,因为它应该作为主查询语言。

8

你换掉ORM的机会是非常渺茫无法比拟的。

QueryOver和Query都有各自的优缺点。

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

虽然很多来自NH的LINQ查询很容易转换为EF,LightSpeed或您选择的ORM,但是LINQ提供程序中内置的NH特定LINQ的整个堆(如提取)会使其变得困难在任何时候换出ORM。

有时QueryOver查询将产生比查询SQL更好,反之亦然,所以只需使用你喜欢什么,当他们被执行,以确保生成的SQL是有效的配置您的查询。