使用Npgsql 3.1.5我嘗試使用NpgsqlCommand.ExecuteReader()
從表中加載數據。一些列是自定義Postgres類型。我想將它們作爲文本讀取,就像Npgsql 2.2用來做的那樣。默認情況下3.1 Npgsql的引發錯誤的那些:如何在Npgsql中只讀未知類型作爲字符串3.1
System.NotSupportedException : The field 'my_custom_type_field' has a type currently unknown to Npgsql (OID 50064). You can retrieve it as a string by marking it as unknown, please see the FAQ.
的FAQ表明要麼設置AllResultTypesAreUnknown
或指定哪些列是未知的,但是這兩個時間都不是一個很好的解決方案。 AllResultTypesAreUnknown
將所有列讀取爲字符串,這對我來說是無用的。因爲有許多表和許多查詢,所以逐個指定單獨的列名將花費比升級代碼以正確使用自定義類型更多的工作。我不想讀取所有的類型作爲字符串,我只想讀取未知的類型作爲字符串。換句話說,當Npgsql否則會拋出上述異常時,將其讀作字符串。有沒有辦法獲得這種行爲?
我明白了,謝謝你的詳細解釋。作爲解決方法,我可以以某種方式使用MapCompositeGlobally來將我的複合類型映射爲字符串嗎? – EM0
沒有。 MapCompositeGlobally只是告訴Npgsql將給定PostgreSQL組合類型的* binary *表示序列化/反序列化爲給定的CLR類型。再次,Npgsql沒有辦法事先知道你的查詢將返回哪些列類型:當你發送'SELECT * FROM x'時,沒有人知道哪些列將被返回。 –
您必須正確移植您的應用程序,最好是創建實際的CLR類型並將它們映射到PostgreSQL組合,或使用AllResultTypesAreUnknown/UnknownResultTypeList(或在您的查詢中添加強制轉換)。 –