3

私は 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 回しか呼び出されない理由を知っています。

前もって感謝します

4

0 に答える 0