2017-01-17 25 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