1

ODBCを介してProgress/OpenEdgeデータベースでNHibernateを使用できるように、カスタム方言を作成しました。ほとんどの場合、方言は正常に機能しますが、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; }
}

編集

残念ながら、NHibernateLinqはプロパティを使用していないようです。SupportsVariableLimit常にパラメータを使用しようとします。

これについては、ソースコードを修正して説明します。

于 2012-07-12T08:00:38.910 に答える