1

我制作了一个自定义方言,以便能够通过 ODBC 将 NHibernate 与 Progress/OpenEdge 数据库一起使用。在大多数情况下,方言可以正常工作,但我对 SELECT TOP 语句有疑问。问题是语句生成如下,列的数量作为参数返回:

SELECT TOP ? SomeColumn
FROM SomeTable
where SomeColumn = ?; p0 = 100, p1 = 'test'

Progress/Openedge 数据库不支持这一点,所以我想对方言进行一些更改,强制语句不使用 SELECT TOP 中列数量的参数 - 如下所示:

SELECT TOP 100 SomeColumn
FROM SomeTable
where SomeColumn = ?; p0 = 'test'

这可能吗?

顺便说一句,我正在使用 NHibernate v. 3.3.1

4

1 回答 1

1

通过查看NHibernate 的源代码,我会说您需要重写SupportsVariableLimit属性才能返回false

/// <summary>
/// Can parameters be used for a statement containing a LIMIT?
/// </summary>
public override bool SupportsVariableLimit
{
    get { return false; }
}

编辑

不幸的是, NHibernate Linq似乎不使用SupportsVariableLimit属性。它总是尝试使用参数。

这是对此的讨论,并带有源代码修复。

于 2012-07-12T08:00:38.910 回答