Entity Framework - Eager Loading
Entity Framework Core - التحميل الفوري (Eager Loading)
🧠 ما هو Eager Loading؟
Eager Loading يعني تحميل الكيان الأساسي وجميع الكيانات المرتبطة به مباشرةً مع نفس الاستعلام، بدلاً من تحميلها لاحقًا عند الحاجة.
الهدف الأساسي منه هو تقليل عدد الرحلات (Queries) إلى قاعدة البيانات وتحميل جميع البيانات المطلوبة دفعة واحدة.
🛠️ كيف يتم استخدام Eager Loading؟
نستخدم الدالة Include() لتحميل الكيانات المرتبطة.
// مثال على Eager Loading
using Microsoft.EntityFrameworkCore;
var ordersWithCustomers = await _context.Orders
.Include(o => o.Customer)
.ToListAsync();
في المثال السابق:
- يتم جلب جميع الطلبات (Orders).
- مع كل طلب يتم تحميل بيانات العميل (Customer) المرتبط به مباشرة.
🔗 استخدام ThenInclude مع علاقات متداخلة
إذا كان لدينا أكثر من مستوى من العلاقات (علاقة داخل علاقة)، نستخدم ThenInclude() للوصول إلى العمق التالي.
// مثال باستخدام ThenInclude
var orders = await _context.Orders
.Include(o => o.Customer)
.ThenInclude(c => c.Address)
.ToListAsync();
هنا:
- يتم تحميل الطلب.
- ومعه العميل.
- ومع العميل يتم تحميل عنوانه (Address).
⚡ ملاحظات مهمة
- يُفضل استخدام Eager Loading عندما تعلم مسبقًا أنك ستحتاج إلى البيانات المرتبطة.
- تحميل بيانات كثيرة جدًا قد يؤثر على الأداء (خاصة مع علاقات كبيرة)، لذلك يجب استخدامه بحكمة.
- يمكنك تحميل أكثر من Navigation Property باستخدام أكثر من Include():
var orders = await _context.Orders .Include(o => o.Customer) .Include(o => o.OrderDetails) .ToListAsync();
🧪 تطبيق عملي صغير
افترض أن لدينا قاعدة بيانات لمكتبة كتب، حيث:
- كل كتاب مرتبط بمؤلف (Author).
- ونريد جلب جميع الكتب مع مؤلفيها.
var books = await _context.Books
.Include(b => b.Author)
.ToListAsync();
وبذلك يتم تحميل الكتب مع المؤلفين في استعلام واحد إلى قاعدة البيانات.
تعليقات
إرسال تعليق