#postgresql #asp.net-core #npgsql
#postgresql #asp.net-core #npgsql
Вопрос:
Передача объекта таблицы pgsql в качестве параметра с использованием c # .net core?
ПРИВЕТ, в pgsql мы можем передать строку таблицы в качестве параметра, я хочу знать, как мы можем использовать его в .net core?
как показано ниже, функция принимает некоторые параметры и предоставляет свою функциональность
-CREATE OR REPLACE FUNCTION public."GetUserName"(u "User_", pmed "Pharmacy", puser "Pharmacy", m "Medication")
RETURNS character varying
LANGUAGE plpgsql
AS $function$
BEGIN
return (
case when u."Id" > 0 then
(
u."FirstName" || ' ' ||coalesce(u."LastName", '')
|| (
case when u."Pharmacy_Id" > 0 then
(case when puser."PharmacyId" > 0 then ' (' || puser."PharmacyName" || ') ' else '' end)
else '' end
)
)
when coalesce (u."Id" , 0) = 0 then pmed."PharmacyName" else '' end
);
END
$function$
;
Я хочу вызвать эту функцию с помощью .net core ef core без динамических запросов с использованием DbFunctions appraoch
Ответ №1:
Вместо того, чтобы пытаться передать всю строку в качестве параметра функции, что обычно не очень эффективно, попробуйте вместо этого передать первичный ключ этой строки. Затем ваша функция может выполнять любые запросы или обновления для этой строки, как обычно.
В общем, в реляционных базах данных строка не существует как объект, который вы передаете или манипулируете как таковой (хотя PostgreSQL имеет поддержку 1-го класса для составных типов, которые также поддерживают таблицы).
Комментарии:
1. да, но я не хочу передавать идентификаторы для многих записей, и он будет проверять базу данных каждый раз
2. Я просто хочу передать целые данные строки, которые будут использоваться только в функции
3. Как я писал выше, PG поддерживает понятие «составных типов», которое можно использовать таким образом. Они не поддерживаются в EF Core ( github.com/npgsql/efcore.pg/issues/22 ).
4. Я просто скажу, что несколько сомнительно (особенно в ядре EF) отправлять значения строк в функцию, которая фактически не обращается ни к какой таблице, а просто делает что-то с тем, что вы ей отправляете, и возвращает результат… С таким же успехом вы можете выполнить вычисления на стороне клиента.