در این آموزش، قصد داریم به یکی از قابلیتهای مهم EF Core بپردازیم. اجرای دستورات SQL خام یا همان Raw SQL Queries. این قابلیت در شرایطی که نیاز به اجرای کوئریهای پیچیده یا بهینهسازی عملکرد داریم، بسیار کاربردی است. EF Core به طور پیشفرض از LINQ برای ساخت کوئری استفاده میکند. اما گاهی مواقع نیاز است که خودمان مستقیماً کوئری SQL بنویسیم، مخصوصاً وقتی:
برای اجرای کوئری SELECT بر روی موجودیتهایی که در DbSet تعریف شدهاند:
var users = context.Users
.FromSqlRaw("SELECT * FROM Users WHERE IsActive = 1")
.ToList();
در مثال بالا، مقدار عددی ۱ مستقیماً در کوئری قرار گرفته و این روش برای مقادیر ثابت قابل استفاده است. ولی اگر بخواهیم پارامتر را مثلا از کاربر بگیریم و ارسال کنیم میتوانیم از روش زیر استفاده کنیم. FromSqlInterpolated از SQL Injection جلوگیری میکند و امنتر است.
var users = context.Users
.FromSqlInterpolated($"SELECT * FROM Users WHERE Age > {minAge}")
.ToList();
اجرای دستورات INSERT, UPDATE, DELETE با ExecuteSqlRaw. توجه: ExecuteSqlRaw مقدار برگشتی ندارد (non-query).
int affectedRows = context.Database.ExecuteSqlRaw("UPDATE Users SET IsActive = 0 WHERE LastLogin < GETDATE() - 30");
استفاده از Raw SQL در EF Core انعطاف فوقالعادهای به ما میدهد تا در موارد خاص بتوانیم کنترل بیشتری روی کوئریها داشته باشیم. اما استفادهی نادرست از آن ممکن است منجر به مشکلات امنیتی یا نگهداری شود.