Entity Framework - Lazy Loading vs Eager Loading
Entity Framework Core - الفرق بين Lazy Loading وEager Loading
عند التعامل مع الكيانات المرتبطة (Related Entities)، يجب أن تختار الطريقة المثلى لتحميل هذه البيانات، إما Lazy Loading أو Eager Loading حسب الحاجة.
---🔹 أولاً: ما هو Eager Loading؟
Eager Loading يعني تحميل جميع البيانات المرتبطة مباشرة مع الاستعلام الأساسي باستخدام Include.
// تحميل الطلاب مع بيانات الأقسام المرتبطة
var students = await dbContext.Students
.Include(s => s.Department)
.ToListAsync();
✅ يتم تنفيذ استعلام واحد يشمل كل البيانات المطلوبة.
---🔹 ثانياً: ما هو Lazy Loading؟
Lazy Loading يعني تأجيل تحميل البيانات المرتبطة حتى يتم الوصول إليها برمجيًا.
لكي يعمل Lazy Loading يجب:
- جعل خصائص الملاحة (Navigation Properties) من النوع
virtual. - تثبيت حزمة
Microsoft.EntityFrameworkCore.Proxiesوتفعيل دعم الـ Proxy.
// التهيئة داخل Program.cs أو Startup.cs
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseLazyLoadingProxies()
.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
---
🔹 مثال عملي على Lazy Loading:
// خاصية الملاحة في Student
public virtual Department Department { get; set; }
// جلب الطالب فقط بدون Include
var student = await dbContext.Students.FirstOrDefaultAsync();
// سيتم جلب بيانات القسم تلقائيًا عند الوصول إلى student.Department
Console.WriteLine(student.Department.Name);
---
🔹 مقارنة بين Lazy Loading وEager Loading:
| الخاصية | Eager Loading | Lazy Loading |
|---|---|---|
| وقت تحميل البيانات | يتم تحميل كل شيء مباشرة | يتم تحميل البيانات عند الحاجة فقط |
| عدد الاستعلامات | استعلام واحد غالبًا | عدة استعلامات قد تنفذ بشكل منفصل |
| الأداء في القوائم الكبيرة | قد يكون بطيئًا إذا حملت بيانات كثيرة لا تحتاجها | أفضل عندما تحتاج بيانات محدودة فقط |
🔹 ملاحظات إضافية:
- ✅ Eager Loading مناسب عندما تحتاج كل البيانات المرتبطة في نفس الصفحة أو العملية.
- ✅ Lazy Loading مناسب عندما تحتاج جزءًا فقط من البيانات أثناء التنقل عبر واجهة المستخدم.
✅ اختيار الطريقة المناسبة (Eager أو Lazy) يعتمد على السيناريو الخاص بتطبيقك واعتبارات الأداء والاستخدام الفعلي للبيانات.
تعليقات
إرسال تعليق