Как передать строку в качестве параметра функции Postgres с помощью .net core DBFunction

#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) отправлять значения строк в функцию, которая фактически не обращается ни к какой таблице, а просто делает что-то с тем, что вы ей отправляете, и возвращает результат… С таким же успехом вы можете выполнить вычисления на стороне клиента.