为什么 NpgsqlParameter 在传递给 DbSet.FromSqlRaw 时不起作用

Why is NpgsqlParameter not working when passed to DbSet.FromSqlRaw

正如我在标题中提到的,DbSet.FromSqlRaw 在我通过 NpgsqlParameter 时不起作用。我总是得到 null。

以下是我尝试过的一些变体:

long value = 3;
NpgsqlParameter npgsqlParameter = new NpgsqlParameter("value", value);
string query = "SELECT * FROM \"Admin\".\"User\" as usr WHERE \"usr\".\"Value\" = '@value'";

var _user = _AdminPanelDbContext
           .User
           .FromSqlRaw(query, npgsqlParameter)
           .FirstOrDefault();
long value = 3;
NpgsqlParameter npgsqlParameter = new NpgsqlParameter("value", value);
string query = "SELECT * FROM \"Admin\".\"User\" as usr WHERE \"usr\".\"Value\" = ':value'";

var _user = _AdminPanelDbContext
           .User
           .FromSqlRaw(query, npgsqlParameter)
           .FirstOrDefault();

在有人问“为什么不使用内联内插字符串?”之前像这样。

FromSqlRaw($"SELECT * FROM \"Admin\".\"User\" as usr WHERE \"usr\".\"Value\" = {value}");

第一个原因是,因为我正在重用 sql 查询(更准确地说,将其保存以供审计),第二个原因是我知道 NpgsqlParameter 也是 SQL 注射安全。

抱歉,我现在无法检查确切的语法 - 但像这样的东西怎么样:

    long value = 3;
    var searchParam = new NpgsqlParameter("value", value);
    var _user = _AdminPanelDbContext.User.FromSqlRaw("select * from admin.user as usr where usr.value = @searchParam;", searchParam).FirstOrDefault();

有一个 end-to-end 示例

但是,听起来您使用的是 Postgres。如果是,请解释为什么您会看到有关需要使用 NpgsqlParameter 而不是 SqlParameter 的错误。