我正在尝试使用Dapper来调用声明如下的PostreSQL函数:
创建或替换函数public.test(param1整数,param2字符变化,param3字符变化)
我正在使用Dapper-Async来调用这个函数:
cnx.QueryAsync($ @“SELECT * FROM public.test(@Param1,@ Param2,@ Param3);”,new {Param1 = 12,Param2 = mylongstring1,Param3 = mylongstring2});
此调用失败,并显示以下错误:
Npgsql.PostgresException(0x80004005):42883:函数public.test(整数,文本,文本)不存在
如您所见, DbString匹配文本参数类型。我怎样才能匹配变化的角色 ?
问题可能是您的函数定义为参数类型character varying
,但错误显示您正在发送text
。虽然这可能有些令人困惑,但这些是两种不同的后端类型。
默认情况下,Npgsql将.NET字符串映射到text
,而不是character varying
。您可以更改函数以接受text
(或添加重载),或使用NpgsqlDbType
指定character varying
(不知道如何使用Dapper执行此操作)。