我們使用Nhibernate 3.3連接到Sybase Ase 15數據庫。一切都很好,除了限制(或頂部)的不支持。它在sybase中實現,但不在Nhibernate中實現。 你有解決方案嗎?如何使用Nhibernate和Sybase實現限制
我試圖創造,我改變這個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()
限制設置爲「?」。
我該怎麼辦?
似乎有一個問題在nHibernate中。您是否檢查了https://groups.google.com/forum/?fromgroups=#!topic/nhibernate-development/TZVi8ce_Vfo – MoCapitan 2013-05-10 09:24:26
正確!我專注於sybase的問題,但我認爲你是對的。你知道我怎麼能得到更正的二進制文件或可能的解決方法? – Eric 2013-05-10 09:52:30