私は sybase ASE 15 で Linq2NHibernate 3.0 を使用しています。私の最初の問題は、方言が制限をサポートしていないことでした (「トップ5 を選択 ...」)。結果として、これらのメソッドをオーバーライドするカスタム方言を作成しました。
public override bool SupportsLimit
{
get { return true; }
}
public override bool SupportsLimitOffset
{
get { return true; }
}
public override bool SupportsVariableLimit
{
get
{
return true;
}
}
public new int GetLimitValue(int offset, int limit)
{
//TOOK FROM ANOTHER DIALECT
if (limit == int.MaxValue)
return int.MaxValue;
if (UseMaxForLimit)
return GetOffsetValue(offset) + limit;
return limit;
}
public override SqlString GetLimitString(SqlString sql, SqlString offset, SqlString limit)
{
//TOOK FROM ANOTHER DIALECT EXCEPT THAT I CALL ANOTHER CUSTOM CLASS
}
注:別のクラスを使用して、ロックを使用して制限値を GetLimitString に渡します(より良い代替手段は見つかりませんでした)
私はそれがうまくいったと思っていましたが、GetLimitString は 1 回しか呼び出されないため、制限値を変更しても考慮されません。
したがって、私の問題は 2 つの方法で解決できます。Sybase のより優れたカスタム方言を使用するか、GetLimitString が 1 回しか呼び出されない理由を知っています。
前もって感謝します