为什么 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 的错误。
正如我在标题中提到的,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 的错误。