我试图弄清楚如何使用 Dapper 将用户定义的复合类型传递给 PostgreSQL 函数。我知道这在 SQL Server 上是可能的,而且我已经有了使用 Dapper+SQL Server 的工作示例,但是,我对如何使用 PostgreSQL 做同样的事情很不了解。
从我读过的一些内容来看,我不确定 Dapper+PostgreSQL 是否可行,但我知道它确实适用于普通的 Npgsql(我也有一个工作示例)。
那么,如何使用 Dapper 调用接受用户定义复合类型的 PostgreSQL 函数?
CREATE TYPE hero AS (
first_name text,
last_name text
);
Run Code Online (Sandbox Code Playgroud)
CREATE OR REPLACE FUNCTION testfuncthattakesinudt(our_hero hero)
RETURNS SETOF characters
LANGUAGE 'sql'
STABLE
ROWS 1000
AS $BODY$
SELECT *
FROM characters
WHERE first_name = COALESCE(our_hero.first_name, '')
AND last_name = COALESCE(our_hero.last_name, '');
$BODY$;
Run Code Online (Sandbox Code Playgroud)
[Test]
public void UsingDapper_Query_CallFunctionThatTakesInUserDefinedCompositeType_FunctionUsesUserDefinedCompositeType()
{
// Arrange
using (var …Run Code Online (Sandbox Code Playgroud) 我有一个 PostgreSQL 函数,它接受一个类型为 的参数json。使用 Dapper,我如何执行将对象传递给 PostgreSQL 函数的调用,以便 PostgreSQL 将类型识别为 asjson而不是 as text?
CREATE OR REPLACE FUNCTION testfuncthattakesinjson(heroes json)
RETURNS SETOF characters
LANGUAGE 'sql'
STABLE
ROWS 100
AS $BODY$
SELECT c.*
FROM characters c
JOIN json_array_elements(heroes) j
ON c.first_name = j->>'first_name'
AND c.last_name = j->>'last_name';
$BODY$;
Run Code Online (Sandbox Code Playgroud)
[Test]
public void Query_CallFunctionThatTakesInJsonParameter_FunctionUsesJsonType()
{
using (var conn = new NpgsqlConnection(Db.GetConnectionStringToDatabase()))
{
var funcName = "testfuncthattakesinjson";
var expect = CharacterTestData.Where(character => character.id …Run Code Online (Sandbox Code Playgroud)