2017-01-17 44 views
0

我試圖用小巧玲瓏來調用聲明爲下面一個PostreSQL功能:Npgsql的小巧玲瓏性格DbString參數vayring

CREATE OR REPLACE FUNCTION public.test(param1 integer, param2 character varying, param3 character varying)

我使用精緻小巧,異步調用這樣這個函數:

cnx.QueryAsync([email protected]"SELECT * FROM public.test(@Param1, @Param2, @Param3);", new { Param1 = 12, Param2 = mylongstring1, Param3 = mylongstring2});

此調用失敗,出現以下錯誤:

Npgsql.PostgresException (0x80004005): 42883: function public.test(integer, text, text) does not exist

如您所見,DbString匹配文本參數類型。 如何才能匹配字符變化而不是?

+0

@roji這是另一個問題。我使用了相同的樣本。 –

+0

道歉 - 我太快了,被刪除了。 –

+0

你想讓我在github上打開一個問題嗎? –

回答

0

該問題可能是因爲您的功能是使用參數類型character varying定義的,但由於錯誤顯示您發送的是text。雖然這可能有點令人困惑,但這是兩種不同的後端類型。

默認情況下,Npgsql將.NET字符串映射到text,而不是character varying。你可以改變你的函數來接受text(或者增加一個過載),或者使用NpgsqlDbType來指定character varying(不知道如何用Dapper做到這一點)。

+0

那麼在函數名稱中有一個錯字:-(它與字符的方式,所以PostgreSQL似乎做所有的工作。 –

+0

真的!我很驚訝... –

+0

@ShayRojansky問題仍然存在。我找到的解決方案是更改函數的簽名...字符串映射到npgsql的文本類型 – Achilles