เหตุใด NpgsqlParameter จึงไม่ทำงานเมื่อส่งผ่านไปยัง DbSet.FromSqlRaw
Sep 03 2020
ในฐานะที่ฉันกล่าวถึงในชื่อเรื่องไม่ได้ทำงานเมื่อฉันผ่าน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 นั้นปลอดภัยเช่นกัน
คำตอบ
2 fuzzy_logic Sep 04 2020 at 13:31
ขอโทษค่ะตอนนี้ตรวจสอบไวยากรณ์ที่แน่นอนไม่ได้ แต่จะเป็นอย่างไร:
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