2012-07-12 6 views
1

我已经制作了一个自定义方言,可以通过ODBC使用NHibernate和Progress/OpenEdge数据库。在大多数情况下,方言工作正常,但是我对SELECT TOP语句有问题。问题是,在生成报表的列的返回作为参数的金额如下:使用NHibernate自定义方言选择顶部到OpenEdge数据库不起作用

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

进展/ Openedge数据库不支持这一点,所以我想做出一些改变的话,强制声明不使用SELECT TOP中的列数量参数 - 如下所示:

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

这可能吗?

通过使用NHibernate诉的方式,即时通讯。3.3.1

回答

1

通过查看NHibernate's source code,我会说,你需要重写SupportsVariableLimit属性返回false

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

编辑

不幸的是,这it seems NHibernate的LINQ的不使用SupportsVariableLimit属性。它总是试图使用参数。

这里的a discussion就是这样,并修复了源代码。

+0

我试过了,但是我会从Dialect.GetLimitString方法中得到一个异常,说“方言不支持变量限制”。 - 发生这种情况是因为limitparameter参数不为null,而限制参数IS null ... – BackendA 2012-07-12 08:24:36

+0

@Reimer请参阅我的编辑... – 2012-07-12 09:57:59

+0

源代码修复功能确实有效,非常感谢。 – BackendA 2012-08-06 11:47:11

相关问题