Npgsql异常:列c.consrc不存在

问题描述 投票:0回答:2

我有一个 Postgres 12 数据库,当前仅包含一个简单的表:

CREATE TABLE public.messages
(
    sender text COLLATE pg_catalog."default",
    "timestamp" timestamp with time zone,
    message_id bigint,
    text text COLLATE pg_catalog."default",
    priority bigint,
    parameters text[] COLLATE pg_catalog."default"
)

不,我想使用 Npgsql 用 C# 和实体框架构建 GUI。我安装了 Nuget 包:

Install-Package EntityFramework6.Npgsql

成功了:

Successfully installed 'EntityFramework6.Npgsql 6.4.0' to TestClient

接下来,我安装了 VS 2019 的 Npgsql 集成(在此处找到)。当我尝试通过在解决方案资源管理器中右键单击 ADO.NET 实体数据模型将其添加到我的项目时,我可以添加连接并且连接测试成功(在向导中完成)。我可以继续选择我的桌子,但一旦按“完成”,我就会收到错误消息:

这是控制台输出:

由于以下异常,无法生成模型: 'System.Data.Entity.Core.EntityCommandExecutionException:错误 执行命令定义时发生。看内在 详细信息例外。 ---> Npgsql.PostgresException:42703:列 c.consrc 不存在

我能做什么?

c# postgresql visual-studio entity-framework npgsql
2个回答
2
投票

PG12 删除了 pg_constraint.consrc,这是由 PG12 删除了 pg_constraint.consrc 跟踪的。在发布修复程序之前,应该可以降级到 PG11。


0
投票

对于 postgres 12+(我当前使用版本 16),可以使用以下查询列出某个表的约束及其详细信息。

SELECT
    conname AS constraint_name,
    contype AS constraint_type,
    conkey AS constrained_columns,
    confkey AS referenced_columns,
    confrelid::regclass AS referenced_table,
    conrelid::regclass AS constrained_table,
    CASE
        WHEN contype = 'f' THEN 'FOREIGN KEY'
        WHEN contype = 'u' THEN 'UNIQUE'
        WHEN contype = 'p' THEN 'PRIMARY KEY'
        WHEN contype = 'c' THEN 'CHECK'
    END AS constraint_category,
    CASE
        WHEN contype = 'c' THEN
            (SELECT pg_get_constraintdef(oid) FROM pg_constraint WHERE oid = c.oid)
    END AS check_expression
FROM
    pg_constraint c
WHERE
    conrelid = 'table_name'::regclass;
© www.soinside.com 2019 - 2024. All rights reserved.