首页 > 解决方案 > NpgSql 上的数组绑定实现

问题描述

我正在使用 Nhibernate over .Net 开发 Npgsql,用于 PostgreSQL 查询生成以及从 oracle 迁移,

我对通过 NpgSql 的“数组绑定”感到困惑我发现一些讨论 数组绑定与 Npgsql似乎解决方案是标准批量插入

示例查询下方;

INSERT INTO <table_name>(C1,C2) VALUES (1, :V01);, V01: "System.String[]"

在 oracle 似乎 odp.net 有一些用于批量插入的数组绑定实现(在 C# 中将批量数据插入 Oracle 数据库)。

在 Npgsql 是否有关于数组绑定或路线图的任何实现?(注意:Npgsql 版本是 3.2.7 ,Nhibernate v4.0.4.4000 最后是 Postgresql 版本 9.4)

标签: nhibernatenpgsqlpostgresql-9.4

解决方案


由于 PostgreSQL对参数有一流的支持,Npgsql 允许您将数组作为单个参数值传递(即,就像您可以有一个字符串列一样,您也可以有一个数组列)。

但是,没有自动方法可以从数组中进行批量插入 - 您将不得不自己编写循环。最有效的方法是使用批量插入二进制 COPY API。否则,您可以在同一个 DbCommand(由分号分隔)内连接多个 INSERT 语句,尽管这样效率会降低。

我认为从数组中批量插入没有什么意义,因为 PostgreSQL 在协议级别不支持类似的东西。因此,如果我们这样做,Npgsql 将只是实现循环而不是用户(纯糖),并且通常我们尝试保持低级并且只公开 PostgreSQL 功能。


推荐阅读