当我尝试使用dapper调用postgre函数时出现错误。我在哪里做错了?如果您能帮助我,我会很高兴。
错误消息:
availability_list(facilityId => integer, startDate => timestamp without time zone, endDate => timestamp without time zone) does not exist"
使用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>;
我的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;
答案 0 :(得分: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);
答案 1 :(得分:1)
尝试以小写形式传递函数参数,即
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>;
对我有用。
答案 2 :(得分:0)
我认为发生这种情况是因为您创建了函数Availability_List
,其中A
和L
大写。但是随后您将使用所有小写字母来调用该函数。我已经遇到了这个问题,请在小情况下全部使用。这样会更好...
答案 3 :(得分:0)
您的startDate,endDate作为DateTime传递。 Postgres会将其作为时间戳记。 函数定义为
CREATE FUNCTION availability_list(
facilityId int,
startDate timestamp without time zone,
endDate timestamp without time zone
)