Npg поддерживает (по крайней мере, в 3.1.7)
Скажем, вы выполняете что-то вроде
INSERT INTO some_table (key, value) SELECT key, value FROM UNNEST(@key_value_pairs);
где key_value_pairs
- это массив вашего типа key_value_pair
, и у вас есть класс, подобный
class key_value_pair
{
string key;
string value;
}
и у вас есть массив этих объектов
key_value_pair[] params = {...};
затем вы добавляете параметры в команду как
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
...
cmd.Parameters.Add("key_value_pairs", NpgsqlDbType.Array | NpgsqlDbType.Composite).Value = params;
cmd.ExecuteNonQuery();
}
Ключевым моментом здесь является установка типа параметра на NpgsqlDbType.Array | NpgsqlDbType.Composite
. Я не пробовал вызывать функцию, которая принимает пользовательский тип, но она должна работать так же, как указано выше См. this для некоторых примеров.