Передать класс dapper в хранимую процедуру postgres - PullRequest
1 голос
/ 26 марта 2020

У меня есть хранимая процедура:

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);
            }
        }

Но это не удается и сообщает, что с этими параметрами не существует хранимой процедуры.

Какой параметр следует указать при создании хранимой процедуры, чтобы она работала?

1 Ответ

2 голосов
/ 26 марта 2020

Dapper ожидает отправки параметров, которые соответствуют объявленным свойствам типа - поэтому в этом случае он захочет отправить Lot_id и Procedure_id. Это выглядит так, как будто вы хотите отправить весь объект как JSON, вместо этого, в этом случае вы, вероятно, захотите:

var json = YourChoiceOfJsonSerializeAPI(item);
// possibly: var json = JsonConvert.SerializeObject(item);
dbConnection.Execute("insert_participant", new { json },
    commandType: CommandType.StoredProcedure);

Теперь у него есть один член с именем json, поэтому один будет добавлен параметр с именем json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...