Мы используем 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
Исправить! Я сосредоточился на проблеме с sybase, но я думаю, что вы правы. Знаете ли вы, как я могу получить двоичные файлы с исправлениями или возможным обходным путем? – Eric