¿Por qué NpgsqlParameter no funciona cuando se pasa a DbSet.FromSqlRaw?
Como mencioné en el título, DbSet.FromSqlRawno funciona cuando paso NpgsqlParameter. Siempre obtengo nulo.
Aquí hay algunas variaciones que he probado:
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();
Antes de que alguien pregunte "¿Por qué no usa cadenas interpoladas en línea?" Me gusta esto.
FromSqlRaw($"SELECT * FROM \"Admin\".\"User\" as usr WHERE \"usr\".\"Value\" = {value}");
La primera razón es porque estoy reutilizando esa consulta sql (para ser más precisos, guardándola para auditoría) y la segunda razón es que soy consciente de que NpgsqlParametertambién es segura la inyección SQL.
Respuestas
Lo siento, no puedo verificar la sintaxis exacta en este momento, pero ¿qué tal algo como:
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();
Hay un ejemplo de extremo a extremo aquí .
Sin embargo, parece que estás usando Postgres. Si es así, explica por qué está viendo el error sobre la necesidad de usar NpgsqlParameter en lugar de SqlParameter.