为了账号安全,请及时绑定邮箱和手机立即绑定

使用 group by 时 npgsql 数据类型未知

使用 group by 时 npgsql 数据类型未知

C#
慕村9548890 2023-05-14 16:34:37
我有 2 个表:CREATE TABLE "book" (  "id" serial PRIMARY KEY,   "ean_number" TEXT NULL,   "title" TEXT NULL ); CREATE TABLE "e_book" (  "id" serial PRIMARY KEY,   "ean" TEXT NULL,   "title" TEXT NULL,   "format" VARCHAR(255) NOT NULL,   "physical_book_ean" TEXT NULL ); 从书到电子书存在一对多或无关系。我想在我的代码中运行这样的查询:var q = "select b.*, array_agg(e) ebooks from book b " +         "left join e_book e on e.physical_book_ean = b.ean_number " +         "group by b.id";using (var cmd = new NpgsqlCommand(q, conn))using (var reader = cmd.ExecuteReader())    while (reader.Read())    {        //read data    }array_agg 列电子书作为内容类型出现<unknown>如何定义内容类型以便我可以阅读它?
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

那里给出的答案是:

首先,如果您创建 e_book 表并在同一进程中查询它,您需要告诉 Npgsql 重新加载数据库类型定义。这是因为当 Npgsql 首次连接到数据库时,它会加载类型列表并将其缓存 - 但此时 e_book 类型尚不存在。如果您使用已经存在的表再次运行您的应用程序,您应该不再有这个问题,或者您可以调用 Npgsql.ReloadTypes()。

其次,您需要在连接字符串上传递 LoadTableComposites=true 标志,告诉 Npgsql 加载所有复合类型——包括那些与表相对应的复合类型。Npgsql 默认情况下不会这样做,因为表的数量可能很大并且在某些情况下会影响启动性能。


查看完整回答
反对 回复 2023-05-14
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信