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

问题描述

正如我在标题中所述,DbSet.FromsqlRaw在通过NpgsqlParameter时不起作用。我总是空。

这是我尝试过的一些变化:

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();

有一个端到端的示例here

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