【发布时间】:2021-03-04 15:18:12
【问题描述】:
我正在尝试使用带有参数的 C# 和 EF Core 执行 SQL 查询。我相信参数被忽略了
我使用的代码是
string sqlQuery = @"SELECT ""Studies"".*
FROM ""Studies""
INNER JOIN ""Searches"" on ""Searches"".""StudyId"" =""Studies"".""StudyId""
WHERE ""Searches"".""Document"" @@ to_tsquery('@text')";
IQueryable<Study> studies = _studiesContext.Studies.FromSqlRaw(sqlQuery, new NpgsqlParameter("@text", "fire"));
我期望发生的是,我从数据库中返回相同的行,就好像我在 Postgres 控制台中运行以下命令一样:
SELECT "Studies"."StudyId",
"Studies"."Title",
"Studies"."Author"
FROM "Studies"
INNER JOIN "Searches" on "Searches"."StudyId" ="Studies"."StudyId"
WHERE "Searches"."Document" @@ to_tsquery('fire');
但我没有。相反,我得到的结果与在 Postgres 控制台中键入以下内容相同:
SELECT "Studies"."StudyId",
"Studies"."Title",
"Studies"."Author"
FROM "Studies"
INNER JOIN "Searches" on "Searches"."StudyId" ="Studies"."StudyId"
WHERE "Searches"."Document" @@ to_tsquery('@text');
我相信在我的查询中@text 不会被fire 替换
EF Core 日志显示:
Executed DbCommand (10ms) [Parameters=[@text='?'], CommandType='Text', CommandTimeout='30']
SELECT "Studies".*
FROM "Studies"
INNER JOIN "Searches" on "Searches"."StudyId" ="Studies"."StudyId"
WHERE "Searches"."Document" @@ to_tsquery('@text')
我觉得我遗漏了一些应该很明显的东西?
【问题讨论】:
-
去掉单引号:
to_tsquery(@text).
标签: c# .net entity-framework-core npgsql