【问题标题】:Dapper Npgsql DbString character vayring parametersDapper Npgsql DbString 字符变量参数
【发布时间】:2017-01-17 22:29:30
【问题描述】:

我正在尝试使用 Dapper 调用声明如下的 PostreSQL 函数:

创建或替换函数 public.test(param1 整数,param2 字符变化,param3 字符变化)

我正在使用 Dapper-Async 像这样调用这个函数:

cnx.QueryAsync($@"SELECT * FROM public.test(@Param1, @Param2, @Param3);", 新 { Param1 = 12, Param2 = mylongstring1, Param3 = mylongstring2});

此调用失败并出现以下错误:

Npgsql.PostgresException (0x80004005): 42883: 函数 public.test(integer, text, text) 不存在

如您所见,DbString 匹配 text 参数类型。 我怎样才能匹配字符变化呢?

【问题讨论】:

  • @roji 这是另一个问题。我使用了相同的样本。
  • 道歉 - 我太快了,已删除。
  • 你想让我在 github 上打开一个问题吗?
  • 现在这看起来像是一个简单的参数类型不匹配(见下面我的回答),如果结果证明是 Npgsql 问题,那么问题会很好。

标签: dapper npgsql


【解决方案1】:

问题可能是您的函数是使用参数类型character varying 定义的,但错误显示您正在发送text。虽然这可能有点令人困惑,但这是两种不同的后端类型。

默认情况下,Npgsql 将 .NET 字符串映射到 text,而不是 character varying。您可以更改您的函数以接受text(或添加重载),或使用NpgsqlDbType 指定character varying(虽然不确定如何使用Dapper 执行此操作)。

【讨论】:

  • 函数名有错别字 :-( 它适用于字符路径,所以 PostgreSQL 似乎完成了所有工作。
  • @ShayRojansky 问题仍然存在。目前我找到的唯一解决方案是更改函数的签名...字符串映射到 npgsql 的文本类型。
  • 另一种解决方案是使用Dapper.Query<T> 而不是Dapper.Execute<T>.. 这样,可以将参数类型转换为character varying...
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
相关资源
最近更新 更多