2
我正在使用一個S#arp架構項目,該項目包含一些過去曾工作的數據庫任務。具體做法是:NHibernate:DB2400Dialect:Dialect不支持變量限制
var principals = _principalTasks.GetAll().AsPagination(page, limit);
其中任務被定義爲:
public IQueryable<Principal> GetAll()
{
return _principalRepository.FindAll().OrderBy(o => o.PrincipalName.ToLower());
}
這是有效地利用NHibernate.Linq。
這是使用DB2400Dialect。現在它拋出:
System.NotSupportedException: Dialect does not support variable limits.
at NHibernate.Dialect.Dialect.GetLimitString(SqlString queryString, Nullable`1 offset, Nullable`1 limit, Parameter offsetParameter, Parameter limitParameter)
at NHibernate.Hql.Ast.ANTLR.SqlGenerator.GetSqlStringWithLimitsIfNeeded(QueryWriter queryWriter)
at NHibernate.Hql.Ast.ANTLR.SqlGenerator.EndQuery()
at NHibernate.Hql.Ast.ANTLR.SqlGenerator.selectStatement()
at NHibernate.Hql.Ast.ANTLR.SqlGenerator.statement()
at NHibernate.Hql.Ast.ANTLR.HqlSqlGenerator.Generate()
.
.
.
它看起來像SQLGenerator堅持參數化該方言不支持的跳過和參數。
有沒有辦法解決這個問題還是這是一個NHibernate的bug?
編輯:
順便說一句,這是從NHibernate.Linq.DefaultQueryProvider電話表達調試字符串:
.Call System.Linq.Queryable.Take(
.Call System.Linq.Queryable.Skip(
.Call System.Linq.Queryable.OrderBy(
.Constant<NHibernate.Linq.NhQueryable`1[SolutionExample.Domain.Principal]>(NHibernate.Linq.NhQueryable`1[SolutionExample.Domain.Principal]),
'(.Lambda #Lambda1<System.Func`2[SolutionExample.Domain.Principal,System.String]>)),
0),
25)
.Lambda #Lambda1<System.Func`2[SolutionExample.Domain.Principal,System.String]>(SolutionExample.Domain.Principal $o) {
.Call ($o.PrincipalName).ToLower()
}
我剛剛試圖建立一個測試臺。我花了一段時間才弄清楚你在問題和答案中所說的話。在花費了幾個小時左右的時間,通過調試器和所有東西,我終於明白你的意思了。雖然,這似乎只是使用linq提供程序的一個問題(這對我來說是不幸的,因爲使用linq是我的練習的重點)。 – 2014-01-22 23:50:18