我们使用 Nhibernate 3.3 连接到我们的 Sybase Ase 15 数据库。除了不支持限制(或顶部)之外,一切都很好。它是在 sybase 中实现的,但不是在 Nhibernate 中实现的。你有解决方案吗?
我尝试创建一个 CustomSybaseAse15Dialect 来更改它:
public override bool SupportsLimitOffset
{
get { return true; }
}
public override SqlString GetLimitString(SqlString sql, SqlString offset, SqlString limit)
{
int insertionPoint = GetAfterSelectInsertPoint(sql);
if (insertionPoint > 0)
{
SqlStringBuilder limitBuilder = new SqlStringBuilder();
limitBuilder.Add("select");
if (insertionPoint > 6)
{
limitBuilder.Add(" distinct ");
}
limitBuilder.Add(" top ");
limitBuilder.Add(limit);
if (offset != null)
{
limitBuilder.Add(" start at ");
limitBuilder.Add(offset);
}
limitBuilder.Add(sql.Substring(insertionPoint));
return limitBuilder.ToSqlString();
}
else
{
return sql; // unchanged
}
}
/// <summary>
/// Copied from MsSql2000Dialect.
/// </summary>
private int GetAfterSelectInsertPoint(SqlString sql)
{
if (sql.StartsWithCaseInsensitive("select distinct"))
{
return 15;
}
if (sql.StartsWithCaseInsensitive("select"))
{
return 6;
}
throw new NotSupportedException("The query should start with 'SELECT' or 'SELECT DISTINCT'");
}
使用 Linq2Nhibernate 语法,它适用于
Session.Query<product>().First()
限制已正确设置为 1 但如果我这样做
Session.Query<product>().Take(3).ToList()
限制设置为“?”。
我能做些什么?