Почему 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-запрос (точнее, сохраняю его для аудита), а вторая причина в том, что я знаю, что NpgsqlParameterSQL-инъекция также безопасна.
Ответы
Извините, я не могу сейчас проверить точный синтаксис, но как насчет чего-то вроде:
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();
Там в впритык пример здесь .
Однако похоже, что вы используете Postgres. Если да, объясните, почему вы видите ошибку о необходимости использовать NpgsqlParameter вместо SqlParameter.