使用 C# 和 Dapper 的 Postgres JSONB 数据类型映射
Postgres JSONB Data Type Mapping using C# and Dapper
我有一个系统通过带有签名的 Postgres 函数审计数据库行 add/edit/delete 操作:
func_audit_record(p_table_name TEXT,
p_action_name TEXT,
p_old_row JSONB,
p_new_row JSONB,
p_edited_by INTEGER)
到目前为止,此函数一直通过其他 Postgres 函数直接执行,但现在我需要直接通过 C# 执行它。
如何在保持上述签名的同时将 C# 数据类型映射到 Postgres JSONB
数据类型?
public async Task AuditAddAsync(string tableName, string actionName, JsonDocument oldRow, JsonDocument newRow, int appUserId)
{
var obj = new
{
p_audit_table_name = tableName,
p_audit_action_name = actionName,
p_old_row_state_as_text = oldRow, //JsonDocument object is too complex here
p_new_row_state_as_text = newRow, //JsonDocument object is too complex here
p_edited_by_user_id = appUserId,
p_system_action = isSystemAction,
p_notes = auditNotes
};
await _dapperAdapter.ExecuteAsync("func_audit_record", obj);
}
我试过上面的 JsonDocument
(RootElement
属性 中的结构似乎是正确的),但那太复杂了。此外,运行 JsonDocument.RootElement.ToString() 会引发错误,因为函数 func_audit_record 需要 JSONB
,而不是 TEXT
.
我真的不想用 TEXT 参数创建副本 func_audit_record。
想法?
您可以使您的代码正常工作。要将 json
传递给您的 plpgsql
函数,请使用 Dapper 的 ICustomQueryParameter
,如
所示
我有一个系统通过带有签名的 Postgres 函数审计数据库行 add/edit/delete 操作:
func_audit_record(p_table_name TEXT,
p_action_name TEXT,
p_old_row JSONB,
p_new_row JSONB,
p_edited_by INTEGER)
到目前为止,此函数一直通过其他 Postgres 函数直接执行,但现在我需要直接通过 C# 执行它。
如何在保持上述签名的同时将 C# 数据类型映射到 Postgres JSONB
数据类型?
public async Task AuditAddAsync(string tableName, string actionName, JsonDocument oldRow, JsonDocument newRow, int appUserId)
{
var obj = new
{
p_audit_table_name = tableName,
p_audit_action_name = actionName,
p_old_row_state_as_text = oldRow, //JsonDocument object is too complex here
p_new_row_state_as_text = newRow, //JsonDocument object is too complex here
p_edited_by_user_id = appUserId,
p_system_action = isSystemAction,
p_notes = auditNotes
};
await _dapperAdapter.ExecuteAsync("func_audit_record", obj);
}
我试过上面的 JsonDocument
(RootElement
属性 中的结构似乎是正确的),但那太复杂了。此外,运行 JsonDocument.RootElement.ToString() 会引发错误,因为函数 func_audit_record 需要 JSONB
,而不是 TEXT
.
我真的不想用 TEXT 参数创建副本 func_audit_record。
想法?
您可以使您的代码正常工作。要将 json
传递给您的 plpgsql
函数,请使用 Dapper 的 ICustomQueryParameter
,如