C# 将dapper类传递给postgres存储过程

C# 将dapper类传递给postgres存储过程,c#,.net,postgresql,C#,.net,Postgresql,我有一个存储过程: CREATE OR REPLACE PROCEDURE insert_participant(j json) LANGUAGE plpgsql AS $$ BEGIN INSERT INTO participant (procedure_id,lot_id)SELECT procedure_id,lot_id FROM json_populate_record(null::participant, j); COMMIT; END; $$; 还有一节

我有一个存储过程:

CREATE OR REPLACE PROCEDURE insert_participant(j json)
LANGUAGE plpgsql    
AS $$
BEGIN
    INSERT INTO participant (procedure_id,lot_id)SELECT procedure_id,lot_id  FROM json_populate_record(null::participant, j);
    COMMIT;
END;
$$;
还有一节课:

    public class Participant : BaseEntity
    {
        [Key]
        public int Procedure_id{ get; set; }
        public int Lot_id { get; set; }      
    }
我正在尝试以下方法:

        public void Add(Participant item)
        {
            using (IDbConnection dbConnection = Connection)
            {
                dbConnection.Open();
                dbConnection.Execute("insert_participant", item, commandType: CommandType.StoredProcedure);
            }
        }
但是它失败了,并告诉我们没有带有这些参数的存储过程


在创建存储过程时,我应该定义什么样的参数才能使其工作?

Dapper希望发送与类型上声明的属性相匹配的参数-因此在这种情况下,它希望发送
Lot\u id
procedure\u id
。看起来您希望将整个对象作为JSON发送,在这种情况下,您可能需要:

var json=YourChoiceOfJsonSerializeAPI(项目);
//可能:var json=JsonConvert.SerializeObject(item);
Execute(“insert_participant”,new{json},
commandType:commandType.StoredProcess);

它现在有一个名为
json
,因此将添加一个名为
json
的参数。

因此没有办法避免序列化吗?@NickFarsi如果重新连接存储过程以不使用json,您可以这样做。但这是原始问题的要点!在声明过程时,我应该使用什么来代替json作为参数?@NickFarsi如果您不想序列化,那么为您要发送的每个属性设置参数;我不会对语法发狂(我主要是SQL Server),但我希望(再次使用SQL Server语法)
@id int、@name nvarchar(200)、@dob datetime、
等等;如果不知道
BaseEntity
有什么,我无法告诉您在您的案例中需要什么,另外。。。同样,语法上的差异,但可能类似于
@Procedure\u id int、@Lot\u id int