用于sybase的NHibernate自定义方言支持限制

时间:2013-11-07 09:45:05

标签: nhibernate limit sybase linq-to-nhibernate dialect

我正在使用Linq2NHibernate 3.0和sybase ASE 15。 我的第一个问题是方言不支持限制(“选择顶部 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只调用一次,因此,如果我更改限制值,则不会将其考虑在内。

所以,我的问题可以通过两种方式解决:你有一个更好的Sybase自定义方言,或者你知道为什么GetLimitString只被调用一次。

提前致谢

0 个答案:

没有答案