2017-01-17 4 views
0

J'essaie d'utiliser Dapper pour appeler une fonction de PostreSQL déclarée comme suit:caractère Dapper Npgsql DbString paramètres vayring

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

J'utilise Dapper-Async d'appeler cette fonction comme ceci:

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

Cet appel échoue avec l'erreur suivante:

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

Comme vous pouvez le voir, le DbString correspond aux types de paramètres text. Comment puis-je faire correspondre caractère variant à la place?

+0

@roji Ceci est un autre problème. J'ai utilisé les mêmes échantillons. –

+0

Excuses - J'étais trop rapide, supprimé. –

+0

Voulez-vous que j'ouvre un problème sur github? –

Répondre

0

Le problème est probablement le fait que votre fonction est définie avec le type de paramètre character varying, mais comme l'erreur indique que vous envoyez text. Bien que cela puisse être un peu confus, ce sont deux types de backend différents.

Par défaut, Npgsql mappe la chaîne .NET à text, et non à character varying. Vous pouvez soit changer votre fonction pour accepter text (ou ajouter une surcharge), ou utiliser NpgsqlDbType pour spécifier character varying (pas sûr comment faire avec Dapper si).

+0

Eh bien, il y avait une faute de frappe dans le nom de la fonction :-(Ca marche avec les caractères, donc PostgreSQL semble faire tout le travail –

+0

Vraiment, je suis surpris ... –

+0

@ShayRojansky Le problème subsiste. solution que j'ai trouvé est de changer la signature pour la fonction ... chaîne est mappée au type de texte pour npgsql – Achilles