CodeShot
Midسختی 3 از ۵· در 35٪ مصاحبه‌های این حوزه پرسیده شده

مشکل N+1 Query در EF Core چیست و چطور حل می‌شود؟

نشان کردن

پاسخ کوتاه

برای هر ردیف والد یک کوئری جدا برای فرزندان اجرا می‌شود؛ با Eager Loading (Include) یک JOIN واحد جایگزین آن می‌شود.

پاسخ کامل

وقتی روی یک Navigation Property بدون Include پیمایش می‌کنید، EF Core برای هر آیتم یک کوئری جداگانه به دیتابیس می‌زند که در حجم بالا کارایی را به‌شدت پایین می‌آورد. راه‌حل استاندارد استفاده از Include یا Projection مستقیم با Select است.

مثال کد

csharp\nvar orders = await db.Orders.Include(o => o.Items).ToListAsync();\n

اشتباه رایج

پیمایش یک Navigation Property داخل یک حلقه بدون Include، که مشکل را فقط در Production با داده واقعی نشان می‌دهد.