如何解决为什么将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的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。