تكرار السؤال: …
الإجابة المختصرة
لا يمكن استخدام نفس نسخة DbContext في عمليتين غير متزامنتين معاً في نفس اللحظة؛ وميزة AddDbContextPool تعيد استخدام نسخ السياق المفتوحة مسبقاً لتوفير كلفة إنشائها المتكرر.
الشرح
الـ DbContext يحتفظ بحالة اتصال ومتبع تغييرات غير محمي بأقفال متزامنة. إذا حاولت تشغيل استعلامين بـ Task.WhenAll(db.Users.ToListAsync(), db.Orders.ToListAsync()) على نفس النسخة، سيرمي EF Core خطأ فورياً. ميزة AddDbContextPool تحتفظ بحمام نُسخ مفحوصة ومنظفة من الـ DbContext وتعيد تدويرها بين طلبات الـ HTTP، مما يرفع كفاءة معالجة الطلبات في الثانية بنسبة ملحوظة.
مثال بالكود
// تفعيل حمام DbContext
builder.Services.AddDbContextPool<AppDbContext>(options =>
options.UseSqlServer(connectionString));أخطاء شائعة
- مشاركة نسخة واحدة من DbContext عبر عدة خيوط متزامنة أو تخزينها كـ Singleton.