1

我正在手动将对象序列化为字符串,并尝试使用 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 字符串/对象保存到适当的字段。

4

2 回答 2

1

我有同样的问题。对于表中存在 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();
            }
于 2020-05-15T06:54:39.270 回答
-1

我不知道 SqlKata,但确实你需要告诉 Npgsql 你正在发送一个json(or jsonb) 类型,因为默认情况下字符串被映射到 PostgreSQLtext类型。PostgreSQL 的类型非常严格,不会在大多数类型之间隐式转换 - 您需要了解如何通过 SqlKata 设置 NpgsqlDbType。

于 2020-05-15T15:31:17.790 回答