Синтаксис для вызова параметризованной функции в Entity Framework, где одним из параметров является INTERVALC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Синтаксис для вызова параметризованной функции в Entity Framework, где одним из параметров является INTERVAL

Сообщение Anonymous »

У меня есть такой вызов в Entity Framework:

Код: Выделить всё

// storageConfiguration and retentionPolicy are some models
string storageId = storageConfiguration.StorageId;
int retentionDays = retentionPolicy.Retention;

// This determines if "day" takes a 's' or no
string dayOrDays = $"day{(retentionDays > 1 ? "s" : string.Empty)}";

// This gives a result like "9 days"
string retentionDaysValue = $"{retentionDays} {dayOrDays}";
string command = $"SELECT add_retention_policy('{storageId}', INTERVAL '{retentionDaysValue}');"

// Now the query is executed
await dbContext.Database.ExecuteSqlRawAsync(command);
Этот код работает без проблем. Теперь я хочу параметризовать этот вызов. Первый параметр, StorageId, кажется, работает правильно, но я не могу найти правильный синтаксис для второго, RetentionDaysValue.
Я попробовал несколько варианты на этот счет:

Код: Выделить всё

string storageId = storageConfiguration.StorageId;
int retentionDays = retentionPolicy.Retention;
string dayOrDays = $"day{(retentionDays > 1 ? "s" : string.Empty)}";
string retentionDaysValue = $"{retentionDays} {dayOrDays}";
var storageIdParameter = new NpgsqlParameter{ParameterName = "storageId", Value = storageId};
var retentionDaysParameter = new NpgsqlParameter{ParameterName = "retentionDays", Value = retentionDaysValue};
string parameterizedCommand = "SELECT add_retention_policy(@storageId, INTERVAL @retentionDays);";
await dbContext.Database.ExecuteSqlRawAsync(parameterizedCommand, storageIdParameter, retentionDaysParameter);
Я получаю исключение при выполнении:

42601: синтаксическая ошибка на уровне "$2" или около него

что, насколько я понимаю, означает, что второй параметр ошибочен.
Некоторые варианты, которые я пробовал:

Код: Выделить всё

// INTERVAL included in the parameter
string parameterizedCommand = "SELECT add_retention_policy(@storageId, @retentionDays);";

// "day" or "days" outside the parameter where "retentionDays" contains only a number
string parameterizedCommand = $"SELECT add_retention_policy(@storageId, INTERVAL @retentionDays '{dayOrDays}');";
и т. д.
Какой синтаксис следует использовать в этом случае, если я хочу параметризовать компонент RetentionDaysValue вызова ?

Подробнее здесь: https://stackoverflow.com/questions/785 ... f-the-para
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»