jsonb_set 使用 Dapper 的功能

jsonb_set function using Dapper

在 PostgreSQL 中,如果我编写此查询,一切正常:

UPDATE states
SET data = jsonb_set(data, '{test}', '"test"')
WHERE object_id = 'string'
RETURNING state_type, object_id, state_id, data

但是如果我想使用 Dapper 在 .NET 中编写类似的查询,则会遇到问题:

Npgsql.PostgresException (0x80004005): 42883: function jsonb_set(jsonb, text, jsonb) does not exist

这是我的 C# 代码:

var sql = @"UPDATE states
        SET data = jsonb_set(data, @key, CAST(@data as jsonb))
        WHERE object_id = @objectId";
        
var result = await dbConnection.QueryFirstAsync<State>(sql, new
{
    objectId = "string",
    key = "{key}",
    data = "test"
});

函数 jsonb_set 接受参数为 (jsonb, text[], jsonb) 而不是 (jsonb, text, jsonb)。所以我将 ::text[] 添加到 @key:

var sql = @"UPDATE states
    SET data = jsonb_set(data, @key::text[], CAST(@data as jsonb))
    WHERE object_id = @objectId";