如何使用 dapper 执行 postgres 函数

bur*_*zan 5 c# postgresql stored-procedures dapper .net-core

当我尝试使用 dapper 调用 postgre 函数时出现错误。我哪里做错了?如果你能帮助我,我会很高兴。

错误信息:

 availability_list(facilityId => integer, startDate => timestamp without time zone, endDate => timestamp without time zone) does not exist"
Run Code Online (Sandbox Code Playgroud)

使用 Dapper 调用 postgre 函数:

var func = "public.availability_list";

var result = db.Query<ReportResponse>(
            sql: func,
            param: new { facilityId = request.FacilityId, startDate = 
            DateTime.Now, endDate = DateTime.Now },
            commandType: CommandType.StoredProcedure, 
            commandTimeout: 900) as List<ReportResponse>;
Run Code Online (Sandbox Code Playgroud)

我的 Postgre 函数:

CREATE FUNCTION Availability_List(facilityId int, startDate date, endDate date)
RETURNS report_type[] 
AS 
$$

DECLARE
result_record report_type[];

BEGIN

result_record := array(  
SELECT...
);

RETURN result_record;

 END $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

Mar*_*gus 1

我希望您需要指定参数、函数的模式并且结果应该匹配。以下可能会起作用,之后您可以替换返回类型以查看它是否正确映射。

var result = _connection.Query<dynamic>(
    "SELECT dbo.Availability_List(@facilityId, @startDate, @endDate)", 
    new { 
        facilityId = request.FacilityId, 
        startDate = DateTime.Now, 
        endDate = DateTime.Now 
    },
    commandType: CommandType.Text,
    commandTimeout: 900);
Run Code Online (Sandbox Code Playgroud)