私は過去に働いたいくつかのデータベースタスクを含むS#arp Architectureプロジェクトで作業しています。具体的には:NHibernate:DB2400Dialect:Dialectは変数の制限をサポートしていません
public IQueryable<Principal> GetAll()
{
return _principalRepository.FindAll().OrderBy(o => o.PrincipalName.ToLower());
}
これは効果的NHibernate.Linqを使用している:
var principals = _principalTasks.GetAll().AsPagination(page, limit);
タスクは、として定義されます。
これは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のバグですか?
編集:私は、私はどちらかによって、この問題を解決することができながら、ということにしました
.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を使用することは私の運動の全体的なポイントであるため、私にとっては不幸です)。 –