Введение
Я использую PostreSQL JSON , который дает мне мощный API, но содержит некоторые странные символы.
EF обрабатывает некоторые из них (например, ->>
), но имеет проблемы с другими (например, @>
)
Цель:
Выполните следующий запрос как необработанный запрос в ядре .net EF:
SELECT * FROM todoitem WHERE "JsonPayload" @> '{"ListProp": [{"Name": "listProp1Name", "Value": "listProp1Value"}]}'
Текущая ситуация
string select = "SELECT * FROM todoitem";
string where = "WHERE \"JsonPayload\" @>";
string listQuery = "'{\"ListProp\": [{\"Name\": \"listProp1Name\", \"Value\": \"listProp1Value\"}]}'";
string query = $"{select} {where} {listQuery}";
Console.WriteLine(query);
var items = _context.TodoItems.FromSql(query).ToList();
Примечание: Пожалуйста, не вините меня за разделение строк здесь. Я просто сужал проблему. Выходная строка точно такая же, как та, которую я выполняю в базе данных (где она работает).
Проблема
Похоже, символ @
берет на себя вину, потому что он интерпретируется как именованный параметр.
Так что вопрос - как избежать этого?
также возможно, что скобки ({
и }
) также будут проблематичными, так как они также используются в качестве переменных показателей. Пожалуйста, также напишите, если вы знаете, как избежать их.
Очевидно, я пытался погуглить, но, похоже, не принято избегать знака @
.
Трассировка стека:
это одинаково в обоих случаях - при использовании @>
и @@>
.
fail: Microsoft.EntityFrameworkCore.Query[10100]
An exception occurred in the database while iterating the results of a query for context type 'dotnet_postgres_test.Models.TodoContext'.
System.FormatException: Input string was not in a correct format.
at System.Text.StringBuilder.FormatError()