我正在手动将对象序列化为字符串,并试图使用SqlKata将它们存储在Postgres数据库中。
var obj = new { Id = 3, JsonB = "{a: 5}" };
dbInstance.Query("TableName").InsertAsync(obj);
这一列 JsonB
属于 jsonb
. 当我试图这样做时,我得到以下错误。
Exception data:
Severity: ERROR
SqlState: 42804
MessageText: column "DataField" is of type jsonb but expression is of type text
我在文档和代码中都没有看到我可以在插入时投递类型的地方,我不知道如何使它能够保存JSON字符串对象到适当的字段。
我有同样的问题。对于表中存在json列的插入,改用NpgsqlCommand和Npgsql.Json.NET库在飞行中序列化对象。不是SqlKata,但可以用。
Product prod;
using (NpgsqlCommand command =
new NpgsqlCommand(@$"INSERT INTO products (json_col) VALUES (@json_col)", connection))
{
command.Parameters.Add(
new NpgsqlParameter("json_col", NpgsqlTypes.NpgsqlDbType.Json) { Value = prod });
await command.ExecuteNonQueryAsync();
}
我不懂SqlKata,但确实需要告诉Npgsql你要发送一个 json
(或 jsonb
)类型,因为字符串是映射到PostgreSQL的 text
类型的默认值。PostgreSQL是相当严格的类型,不会隐式地在大多数类型之间进行转换--你需要找出如何通过SqlKata设置NpgsqlDbType。