2017-01-17 12 views
0

Я пытаюсь использовать щеголеватый для вызова функции PostreSQL объявленной как следующее:Щеголеватого Npgsql DbString характер vayring параметры

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

Я использую Dapper Асинхра вызвать эту функцию следующим образом:

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 соответствует text типы параметров. Как я могу совместить символ, меняющийся?

+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