我有 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 ); 從書到電子書存在一對多或無關(guān)系。我想在我的代碼中運行這樣的查詢: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 列電子書作為內(nèi)容類型出現(xiàn)<unknown>如何定義內(nèi)容類型以便我可以閱讀它?
1 回答

BIG陽
TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
那里給出的答案是:
首先,如果您創(chuàng)建 e_book 表并在同一進(jìn)程中查詢它,您需要告訴 Npgsql 重新加載數(shù)據(jù)庫類型定義。這是因為當(dāng) Npgsql 首次連接到數(shù)據(jù)庫時,它會加載類型列表并將其緩存 - 但此時 e_book 類型尚不存在。如果您使用已經(jīng)存在的表再次運行您的應(yīng)用程序,您應(yīng)該不再有這個問題,或者您可以調(diào)用 Npgsql.ReloadTypes()。
其次,您需要在連接字符串上傳遞 LoadTableComposites=true 標(biāo)志,告訴 Npgsql 加載所有復(fù)合類型——包括那些與表相對應(yīng)的復(fù)合類型。Npgsql 默認(rèn)情況下不會這樣做,因為表的數(shù)量可能很大并且在某些情況下會影響啟動性能。
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消