【问题标题】:Raw SQL in Postgres with EntityFramework CorePostgres 中的原始 SQL 与 EntityFramework Core
【发布时间】:2019-10-06 08:19:08
【问题描述】:

假设我有一个客户表,并且想使用原始 SQL 进行查询。以下代码不起作用:

List<Customer> customers = _db.Customer.FromSql("SELECT * FROM Customer").ToList();

失败并显示错误代码

'42P01:关系“客户”不存在'

【问题讨论】:

    标签: sql postgresql entity-framework-core quoted-identifier


    【解决方案1】:

    在某些情况下,Postgres 会生成区分大小写的表名,因此您可能必须以这种方式引用表名。这是通过在表名周围添加引号来完成的,如下所示:"Customer"

    您可能还需要包含架构。这应该有效:

    List<Customer> customers = _db.Customer.FromSql("SELECT * FROM \"public\".\"Customer\"").ToList();
    

    假设您的架构名称是“public”。否则请插入您的架构名称。

    【讨论】:

    • Postgres 不会“产生”区分大小写的名称 - 这完全是您编写 CREATE TABLE 语句的结果。规则是quite clear,但使用带引号的标识符是strongly discouraged
    • 你当然是对的。自从我使用 SQL 管理器向导创建数据库以来,我刚刚遇到了带引号的标识符的情况。
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多