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
?