Entity Framework - الاستعلام الخام (Raw SQL Queries)
Entity Framework Core - الاستعلام الخام (Raw SQL Queries)
أحيانًا تحتاج إلى تنفيذ استعلام SQL يدوي مباشرةً عندما لا يكون من السهل أو من العملي كتابته باستخدام LINQ، وهنا يمكنك استخدام Raw SQL Queries مع EF Core.
---🔹 طرق تنفيذ Raw SQL في EF Core:
- FromSqlRaw: لتنفيذ استعلامات SELECT خام بدون معلمات مؤمنة.
- FromSqlInterpolated: لتنفيذ استعلامات مع دعم التحقق التلقائي من المعلمات (لحماية من SQL Injection).
🔹 مثال عملي على FromSqlRaw:
// جلب الطلاب باستخدام SQL خام
var students = await dbContext.Students
.FromSqlRaw("SELECT * FROM Students")
.ToListAsync();
---
🔹 مثال عملي على FromSqlInterpolated مع معلمات:
// جلب الطلاب حسب العمر باستخدام معلمات مؤمنة
int minAge = 20;
var students = await dbContext.Students
.FromSqlInterpolated($"SELECT * FROM Students WHERE Age >= {minAge}")
.ToListAsync();
---
🔹 شرح الفرق بين FromSqlRaw وFromSqlInterpolated:
- FromSqlRaw: تحتاج إلى تمرير المعلمات يدويًا لتفادي ثغرات SQL Injection.
- FromSqlInterpolated: يقوم بحقن المعلمات بطريقة آمنة تلقائيًا.
🔹 ملاحظات مهمة عند استخدام Raw SQL:
- ✅ يجب أن يكون الاستعلام SELECT متوافقًا مع الكيان المرتبط (Entity Type) الذي تنفذه عليه.
- ✅ لا يمكنك تنفيذ استعلامات INSERT أو UPDATE أو DELETE مباشرة باستخدام FromSqlRaw أو FromSqlInterpolated، بل فقط استعلامات قراءة (SELECT).
- ✅ في حالة احتياجك لتنفيذ أوامر تعديل بيانات، استخدم
ExecuteSqlRawأوExecuteSqlInterpolated.
🔹 مثال على تنفيذ أمر SQL للتعديل:
// تحديث أعمار الطلاب
await dbContext.Database.ExecuteSqlRawAsync(
"UPDATE Students SET Age = Age + 1 WHERE Age >= 20"
);
---
✅ الاستعلامات الخام توفر لك مرونة كاملة إذا كنت تحتاج كتابة استعلامات مخصصة أو معقدة يصعب تنفيذها بـ LINQ.
تعليقات
إرسال تعليق