
آموزش Raw SQL Queries در EF Core
در این آموزش، قصد داریم به یکی از قابلیتهای مهم EF Core بپردازیم. اجرای دستورات SQL خام یا همان Raw SQL Queries. این قابلیت در شرایطی که نیاز به اجرای کوئریهای پیچیده یا بهینهسازی عملکرد داریم، بسیار کاربردی است. EF Core به طور پیشفرض از LINQ برای ساخت کوئری استفاده میکند. اما گاهی مواقع نیاز است که خودمان مستقیماً کوئری SQL بنویسیم، مخصوصاً وقتی:
- کوئری خیلی پیچیده باشد و با LINQ به سختی پیاده شود.
- بخواهیم از یک Stored Procedure استفاده کنیم.
- نیاز به performance بالا داریم و کوئری بهینهتری نوشتهایم.
استفاده از FromSqlRaw و FromSqlInterpolated
برای اجرای کوئری 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 Queries
- هرگز از FromSqlRaw با مقادیر مستقیم کاربر استفاده نکنید.
- از FromSqlInterpolated استفاده کنید یا SqlParameter.
- لاگگیری کوئریها را فعال کنید تا از اجرای صحیح و ایمن آنها مطمئن شوید.
نتیجهگیری آموزش Raw SQL Queries در EF Core
استفاده از Raw SQL در EF Core انعطاف فوقالعادهای به ما میدهد تا در موارد خاص بتوانیم کنترل بیشتری روی کوئریها داشته باشیم. اما استفادهی نادرست از آن ممکن است منجر به مشکلات امنیتی یا نگهداری شود.



























فرم افزودن دیدگاه
با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.