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 في الوقت المناسب يجعل تطبيقاتك أخف وأسرع وأكثر كفاءة خصوصًا مع قواعد بيانات ضخمة أو أنظمة تعتمد على القراءة بكثافة.
تعليقات
إرسال تعليق