Я пытаюсь выполнить запрос с транзакцией в Npg sql, поскольку это делает код значительно чище и более совместимым с запросами в других системах с чистым SQL. Однако я получаю ошибку Npgsql.PostgresException: 42703: column "_hash" does not exist
в следующем коде.
var cmd = new NpgsqlCommand(@"
do
$do$
begin
if ((select count(1) from components where hash = @_hash) = 0) then
insert into components (hash, name) values (@_hash, @_name);
end if;
end
$do$", db); // db is NpgsqlConnection connection
cmd.Parameters.AddWithValue("_hash", "00000000-0000-0000-0000-000000000000");
cmd.Parameters.AddWithValue("_name", "t_test");
cmd.ExecuteNonQuery(); // error on this line
Следующее действительно работает по какой-то причине, что заставляет меня думать, что это проблема с AddWithValue в транзакциях
Жесткое кодирование значения;
var cmd = new NpgsqlCommand(@"
do
$do$
begin
if ((select count(1) from components where hash = '00000000-0000-0000-0000-000000000000') = 0) then
insert into components (hash, name) values ('00000000-0000-0000-0000-000000000000', 't_test');
end if;
end
$do$", db);
cmd.ExecuteNonQuery();
Избавление от транзакции
var cmd = new NpgsqlCommand("insert into components (hash, name) values (@_hash, @_name);", db)
cmd.Parameters.AddWithValue("_hash", "00000000-0000-0000-0000-000000000000");
cmd.Parameters.AddWithValue("_name", "t_test");
cmd.ExecuteNonQuery();
В чем причина этой проблемы и как ее можно исправить?
ПРИМЕЧАНИЕ. Я могу запустить запрос, который не выполняется в менеджере баз данных, таком как JetBrains DataGrip, поэтому запрос не искажен.