我正在使用带有 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 只被调用一次,因此,如果我更改限制值,它不会被考虑在内。
所以,我的问题可以通过两种方式解决:你有一个更好的 Sybase 自定义方言,或者你知道为什么 GetLimitString 只被调用一次。
提前致谢