使用SqlKata保存和检索JSONB列。

问题描述 投票:0回答: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字符串对象到适当的字段。

npgsql sqlkata
1个回答
0
投票

我有同样的问题。对于表中存在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();
            }

0
投票

我不懂SqlKata,但确实需要告诉Npgsql你要发送一个 json (或 jsonb)类型,因为字符串是映射到PostgreSQL的 text 类型的默认值。PostgreSQL是相当严格的类型,不会隐式地在大多数类型之间进行转换--你需要找出如何通过SqlKata设置NpgsqlDbType。

© www.soinside.com 2019 - 2024. All rights reserved.