我正在运行Postgres的本地副本,并且我正在使用nHibernate作为ORM的C#.Net Core 2.1应用程序上工作。
它开始引发异常:PostgresException: 42703: column this_.datasetname does not exist
复制SQL并在pgAdmin中运行时,我收到类似的错误。
这是给出相同错误的SQL的简短版本:
SELECT this_.datasetName FROM orders this_
错误:列this_.datasetname不存在LINE 1:SELECTthis_.datasetName FROM命令this_^提示:也许您打算引用列“ this_.datasetName”。 SQL状态:42703字符:8
如果我在列名的周围加上引号(但建议不要在_this.
周围加上引号,则可以,但是显然我不能告诉nHibernate这样做。
SELECT this_."datasetName" FROM orders this_
以下内容也可以正常工作:
SELECT "datasetName" FROM orders
为什么会坚持添加引号?它从未使用过。
这是因为此列首先是用双引号引起来的-这使标识符区分大小写,而默认情况下则不区分大小写。由于标识符包含大小写混合的内容,因此您会遇到麻烦:在使用标识符的任何地方都必须加引号。
如果查看表的定义,将会看到类似以下内容的内容:
create table orders (
...,
"datasetName" text,
...
)
我强烈建议您修复您的架构。带引号的标识符通常不会增加任何值,但另一方面,它们会使不必要的事情变得复杂。驼峰大小写不适用于数据库标识符,蛇形大小写更好,因为大小写没有意义:
create table orders (
...,
dataset_name text,
...
)