DbSet.FromSqlRaw'a geçirildiğinde NpgsqlParameter neden çalışmıyor?

Sep 03 2020

Başlıkta da belirttiğim gibi, DbSet.FromSqlRawgeçerken çalışmıyor NpgsqlParameter. Ben her zaman boş kalırım.

İşte denediğim bazı varyasyonlar:

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

Biri sormadan önce "Neden satır içi enterpolasyonlu dizeler kullanmıyorsunuz?" bunun gibi.

FromSqlRaw($"SELECT * FROM \"Admin\".\"User\" as usr WHERE \"usr\".\"Value\" = {value}");

Birincisi, bu sql sorgusunu yeniden kullanıyorum (daha kesin olmak gerekirse, denetlemek için kaydediyorum) ve ikinci neden de bunun NpgsqlParameterSQL enjeksiyonunun güvenli olduğunun farkında olmam .

Yanıtlar

2 fuzzy_logic Sep 04 2020 at 13:31

Maalesef şu anda tam söz dizimini kontrol edemiyorum - ama şöyle bir şeye ne dersiniz:

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

Burada uçtan uca bir örnek var .

Ancak, Postgres kullanıyormuşsunuz gibi görünüyor. Cevabınız evet ise, neden SqlParameter yerine NpgsqlParameter kullanma gereksinimi ile ilgili hata gördüğünüzü açıklar.