gpt4 book ai didi

NHibernate: DB2400Dialect: 方言不支持变量限制

转载 作者:行者123 更新时间:2023-12-04 05:52:21 25 4
gpt4 key购买 nike

我正在处理一个 S#arp 架构项目,其中包括一些过去工作过的数据库任务。具体来说:

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 错误?

编辑:

顺便说一句,这是来自 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()
}

最佳答案

经过大量研究,我决定虽然我可以通过创建自己的自定义方言来解决这个问题 - 或者扩展现有的 DB2400Dialect 来实现 -

public SqlString GetLimitString(SqlString queryString, int? offset, int? limit, Parameter offsetParameter, Parameter limitParameter)

这是毫无意义的,因为虽然 iSeries 允许限制
... FETCH FIRST n ROWS ONLY

语法,它没有进行偏移的等效语法......因此,修复损坏的位没有多大意义。

关于NHibernate: DB2400Dialect: 方言不支持变量限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com