提问人:User7291 提问时间:10/26/2023 更新时间:10/26/2023 访问量:19
在 .net 6 中使用复合参数调用 Postgres 过程
Call Postgres procedure with Composite param in .net 6
问:
我已经在 postgres 中创建了一个自定义类型作为复合类型,并将其作为参数传递给过程,我想从 .net 6 调用该过程,但我一直收到错误"InvalidCastException: Can't convert .NET type 'ArtProductService.Models.Dtos.BulkUpdateAcquisitionDto' to PostgreSQL '.<unknown>' within an array"
这是我的职能
var dataSourceBuilder = new NpgsqlDataSourceBuilder(_connectionString);
dataSourceBuilder.MapComposite<List<myObject>>("composite[]");
await using var dataSource = dataSourceBuilder.Build();
using var conn = dataSource.CreateConnection();
conn.ConnectionString = _connectionString;
string query = "\"schema\".\"procedureName\"";
conn.Open();
NpgsqlCommand command = new NpgsqlCommand(query, conn);
var param = command.CreateParameter();
param.ParameterName = "paramName";
param.Value = paramValue;
param.DataTypeName = "composite[]";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(param);
await command.ExecuteNonQueryAsync();
答:
1赞
Shay Rojansky
10/26/2023
#1
dataSourceBuilder.MapComposite<List<myObject>>("composite[]");
数组本身(或 List)不是复合对象;尝试映射基本类型:
dataSourceBuilder.MapComposite<myObject>("composite");
当您执行上述操作时,Npgsql 也会自动完成数组映射。
(还要确保你真的希望你的 PG 类型被实际调用——对于一个类型来说,这是一个非常糟糕的名字)。composite
如果这没有帮助,请在上面发布一个完全可运行的代码示例,而不是一个片段。
评论