Npgsql 在 CommandBuilder DeriveParameters 上失败

Npgsql failing on CommandBuilder DeriveParameters

在尝试使用以下代码时,我收到此错误:

Message: Invalid parameter type: 277447 Source: Npgsql

程序在执行时爆炸:

NpgsqlCommandBuilder.DeriveParameters(cmd);

   NpgsqlConnection conn = new NpgsqlConnection();
                conn.ConnectionString = connection.ConnectionString;
                conn.Open();
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "g_savedx";
                    cmd.CommandType = CommandType.StoredProcedure;
                    NpgsqlCommandBuilder.DeriveParameters(cmd);
                    cmd.Parameters["_cpatient"].Value = cpatient;
                    cmd.Parameters["o"].Value = olddx;
                    cmd.Parameters["n"].Value = newdx;
                    var rowsAffected = cmd.ExecuteNonQuery(); 
                }

PostgreSQL 9.1 存储过程定义为:

FUNCTION g_savedx(_cpatient text, o view_dx, n view_dx) RETURNS void

其中 view_dx 是 PostgreSQL 数据库中的简单表。

我做错了什么?

非常感谢任何帮助。

对于像我这样的新手,DeriveParameters 的上述用法是正确的——来自 Npgsql 的错误消息也是如此。基本问题是 PostgreSQL 存储函数的接口只能使用 NpgsqlDbType 枚举指定的 DbTypes。 NpgsqlDbType(此时)中不存在复合类型 "Object" 或 "View_dx",因此 DerviveParameters 失败。

我的解决方案是将对象序列化为 NpgsqlDbType 允许的一种或多种枚举,并相应地更改存储过程接口。