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) يعتمد على السيناريو الخاص بتطبيقك واعتبارات الأداء والاستخدام الفعلي للبيانات.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

Entity Framework - مقدمة عن Entity Framework