nhibernate和窗口功能

有没有办法让NHibernate使用Window函数?

具体来说,我期待创建一个如下所示的查询:

SELECT
  date,
  SUM(Price) OVER (ORDER BY date)
FROM purchases
GROUP BY date

我搜索了网页,找不到关于窗口函数和NHibernate的任何内容

具体来说,我使用NHibernate的QueryOver接口。

如果这是不可能的,还有什么其他解决方案来保持我的代码中的数据库独立性?


好的问题,但不幸的是,我从来没有在NHibernate中看到过任何代码,这将允许它生成这样的窗口函数。

你唯一的选择是使用命名查询。 在您的命名查询中,您可以手动输入SQL或调用存储过程。

您表示您希望保持解决方案数据库的独立性。 我从来没有亲自关心过像SQL Server那样的事情,但我可以理解你来自哪里。 我听说过几个人使用内存SQLite解决方案运行他们的集成测试,然后在SQL Server或Oracle上运行他们的实际代码。

在你的场景中,我不认为你的问题中的SQL无论如何都是ANSI兼容的,所以如果你使用命名查询来使它与数据库无关,那么你不得不以不同的方式重写它。


据我所知,你不能用QueryOver API来做到这QueryOver

我会尽可能保持独立数据库的可能性,就是将查询的窗口视为表和查询之间的连接。 然后编写一个QueryOver来引导这个连接。

考虑到你的查询会导致这样的结果:(尽管这个例子似乎并不真正表明需要一个窗口化查询)

SELECT
  purchases.date,
  purchasesGroup.priceSum
FROM 
     purchases
INNER JOIN 
     (SELECT date, SUM(Price) as priceSum  FROM purchases GROUP BY date) 
       AS purchasesGroup
on purchases.date = purchasesGroup.date

你可能会使用这个视图。 这至少可以抽象出一点,尽管你确实将依赖关系迁移到数据库模式。

最近我也遇到过这种问题,并且我开始意识到我经常试图以一种并非真正持久化实体的方式来使用NHibernate。 如果我是Ayende Rahien,我可能会知道该怎么做,但由于我不是,通常最终会混入一个小巧的Dapper,因为我只需要诸如统计关于数据的只读聚合结果。

链接地址: http://www.djcxy.com/p/20329.html

上一篇: nhibernate and window functions

下一篇: Windows phone 7.0 vs 7.5