Я попытался выполнить следующую хранимую процедуру:
CREATE OR REPLACE PROCEDURE gselogwebsite_add
(
_logUserId INT,
_logSourceId INT,
_logCat INT,
_logLevel INT,
_logType INT,
_logText TEXT,
_logDateTimeUTC TIMESTAMP WITHOUT TIME ZONE,
INOUT _logId BIGINT
)
LANGUAGE plpgsql AS
$BODY$
BEGIN
...
...
...
END;
$BODY$;
Я попытался вызвать свой ASP.NET Core 8.0 MVC, используя EF Core 8.0.5, со следующим кодом:
context.Database.ExecuteSqlRaw("CALL gselogwebsite_add(@_logUserId, @_logSourceId, @_logCat, @_logLevel, @_logType, @_logText, @_logDateTimeUTC, @_logId)",
new NpgsqlParameter("_logUserId", logUserId),
new NpgsqlParameter("_logSourceId", logSourceId),
new NpgsqlParameter("_logCat", logCat),
new NpgsqlParameter("_logLevel", logLevel),
new NpgsqlParameter("_logType", logType),
new NpgsqlParameter("_logText", logText),
new NpgsqlParameter("_logDateTimeUTC", logDateTimeUTC),
new NpgsqlParameter("_logId", DBNull.Value) { DbType = DbType.Int64, Direction = ParameterDirection.InputOutput }
);
Но я получаю эту ошибку:
Npgsql.PostgresException: '42883: процедура gselogwebsite_add(целое, целое, целое, целое, целое, текст, временная метка с часовым поясом, bigint) не существует
Проверил соединение, все в порядке. Я проверил типы данных, все в порядке. Я проверяю базу данных с помощью DBeaver и вижу там функцию gselogwebsite_add(in int4, in int4, in int4, in int4, in int4, in text, in timestamp, inout int8).
Но по какой-то причине я не могу выполнить эту хранимую процедуру.
Есть идеи?
Спасибо :)
В процедуре есть TIMESTAMP WITHOUT TIME ZONE, и появляется ошибка: «Временная метка с часовым поясом».
К какой базе данных подключено ваше приложение ASP.NET? В какой базе данных определена ваша хранимая процедура?
СвятославДанилив/Луук – сработало! пожалуйста, укажите это как решение, и я приму ваш ответ...
Почему бы не опубликовать ответ самостоятельно? (см.: Могу ли я ответить на свой вопрос?) (Извините, мне лень писать ответ о чем-либо, к чему вы могли бы прийти, читая (и пытаясь понять) сообщение об ошибке 😉)





В Ef Core 6+ Npgsql будет переводить DateTime с KindDateTimeKind.Utc на TIMESTAMP WIH TIME ZONE, DateTimeKind.Local и DateTimeKind.Unspecified на TIMESTAMP WITHOUT TIME ZONE. Пожалуйста, убедитесь, что logDateTimeUTCDateTime.Kind не является UTC. Если вы убедитесь, что это не UTC, то, насколько мне известно, это может быть внутренняя проблема EF Core, и Npgsql дайте мне знать, чтобы я подробно рассмотрел вашу проблему.
timestamp with time zoneвыглядит подозрительно.