Entity Framework - متى تستخدم NoTracking

Entity Framework Core - متى تستخدم NoTracking؟

في EF Core، عندما تستخدم استعلامات قراءة فقط (Read-Only) ولا تنوي تعديل الكائنات المُسترجعة، من الأفضل أن تستخدم AsNoTracking() لتحسين الأداء بشكل كبير.

---

🔹 ماذا يفعل AsNoTracking؟

  • يعطل خاصية تتبع التغييرات (Change Tracking) للكائنات المُحمّلة من قاعدة البيانات.
  • يقلل استهلاك الذاكرة ويحسن سرعة الاستعلامات خصوصًا مع البيانات الضخمة.
---

🔹 متى تستخدم AsNoTracking؟

  • ✅ عندما تحتاج إلى عرض بيانات فقط بدون تعديلها.
  • ✅ عند تنفيذ استعلامات ثقيلة أو تحميل كميات ضخمة من البيانات.
  • ✅ عندما تتعامل مع بيانات تقريرية أو شاشات عرض فقط (Reporting / Dashboard Screens).
---

🔹 مثال عملي على استخدام AsNoTracking:


// جلب الطلاب للعرض فقط بدون تتبع التغييرات

var students = await dbContext.Students
    .AsNoTracking()
    .ToListAsync();
---

🔹 ملاحظات مهمة:

  • ✅ الكائنات التي تم تحميلها باستخدام AsNoTracking لا يمكن تعديلها وحفظها بنفس سياق DbContext الحالي بدون إعادة تتبعها (Attach).
  • ✅ يمكنك أيضًا استخدام AsNoTrackingWithIdentityResolution() إذا كنت تريد تحميل الكيانات بدون تتبع مع الحفاظ على تمييز الكائنات المرتبطة.
---

🔹 مثال متقدم على AsNoTrackingWithIdentityResolution:


// جلب الطلاب مع أقسامهم بدون تتبع ولكن مع الحفاظ على هوية الكيانات المرتبطة

var students = await dbContext.Students
    .Include(s => s.Department)
    .AsNoTrackingWithIdentityResolution()
    .ToListAsync();
---

✅ استخدام AsNoTracking في الوقت المناسب يجعل تطبيقاتك أخف وأسرع وأكثر كفاءة خصوصًا مع قواعد بيانات ضخمة أو أنظمة تعتمد على القراءة بكثافة.

تعليقات

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

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

1.1 SQL Introduction

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