使用Dapper.Net和NPGSQL将数据插入到PostgreSQL的jsonb列中

9
我正在尝试使用Dapper.Net将JSON数据插入到JSONB PostgreSQL列中。 NPGSQL Documentation for JSONB提供了使用NpgsqlDbType.Jsonb数据类型的具体说明。使用Dapper时,我尝试添加此自定义参数,但未成功。
using (var conn = myconnection)
{
    var sql = "INSERT INTO mytable (jsonbody) VALUES (@jb);";
    dp =  new DynamicParameters();
    dp.Add("jb", stringOfJsonData, (DbType)NpgsqlDbType.Jsonb);
    await conn.ExecuteAsync(sql,dp);                    
}                

我收到的错误是System.NotSupportedException: 参数类型 DbType.36 不受 PostgreSQL 或 Npgsql 支持 有关如何将这两个库一起用于JSONB的建议吗?
谢谢。
2个回答

10
看起来将SQL语句更改为以下内容已经解决了问题。
var sql = "INSERT INTO mytable (jsonbody) VALUES (CAST(@jb AS json));";

此外,在参数映射中不需要指定类型。

dp.Add("jb", stringOfJsonData)

2

NpgsqlDbType和DbType是两个不同的枚举类型,你不能简单地将一个强制转换为另一个...

你需要在创建并发送NpgsqlParameters时设置NpgsqlDbType属性。如果我没记错的话,有一种方法可以指定自定义参数。


你可以使用AddWithValue的这个重载版本。或者自己实例化一个NpgsqlParameter,设置它的NpgsqlDbType属性并将其添加到命令的参数集合中。 - Shay Rojansky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接