gpt4 book ai didi

postgresql - 基于 NHibernate 公式的属性 + PostgreSQL 区间

转载 作者:行者123 更新时间:2023-11-29 13:00:40 27 4
gpt4 key购买 nike

我将 NHibernate 与代码映射一起使用,并且我有一个由此公式创建的属性。

Property(x => x.IsInOverdue,
mapper => mapper
.Formula("(SELECT (state_ <> 3 AND invoice_uniqueAlias.duedate_ < NOW()) " +
" FROM _invoice AS invoice_uniqueAlias "+
" WHERE invoice_uniqueAlias.invoice_id = issuedinvoice_key)"));

它完美地工作,这个 sql 在所有查询中作为子选择插入...

但我需要将 1 天添加到 invoice_uniqueAlias.duedate_ 值。我们使用的是 PostgreSQL,它的语法是:invoice_uniqueAlias.duedate_ + interval '1 day'

但是当我把它放在 mapper.Formula 中时,NHibernate 认为 interval 是列的名称,并且在所有查询中都试图在 interval 关键字之前添加表前缀。生成的 SQL 如下所示:

... (SELECT (issuedinvo0_.state_ <> 3 
AND (invoice_uniqueAlias.duedate_ + (issuedinvo0_.interval '1 day')) < NOW()) ...

我尝试在 [, ` 中放置 interval 关键字,将语句 interval + '1 day' 放在括号中,但没有帮助。关于如何在 NHibernate 中正确处理它或者如何在不使用 + interval 语法的情况下在 Postgres 中编写它有什么建议吗?

最佳答案

以防万一,我们需要 NHibernate 将一些单词(key words) 视为底层数据库引擎方言的一部分,我们必须扩展它。

一种方法是创建自定义方言:

public class CustomPostgreDialect : PostgreSQL82Dialect
{
public CustomPostgreDialect()
{
RegisterKeyword("interval");
}
}

现在只需使用它:

<property name="dialect">My.Namespace.CustomPostgreDialect,My.Data</property>

一些类似的问题 - Using SQL CONVERT function through nHibernate Criterion (使用类似的解决方案 in this answer )

关于postgresql - 基于 NHibernate 公式的属性 + PostgreSQL 区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31137795/

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