← بازگشت به تالار
هنرجو حل‌شده

چه زمانی در EF Core از AsNoTracking استفاده کنیم؟

ریحانه حسینی 1405/05/13 14:25 💬 1 پاسخ ◉ 143 بازدید
برای صفحه فهرست دوره‌ها فقط اطلاعات را می‌خوانم و هیچ Update انجام نمی‌شود. آیا استفاده از AsNoTracking همیشه باعث سریع‌تر شدن Query می‌شود؟ اگر بعداً همان Entity را ویرایش کنم چه اتفاقی می‌افتد؟

پاسخ‌ها

1 پاسخ ثبت‌شده
مهندس سارا احمدی مدرس ✓ پاسخ پذیرفته‌شده
برای Queryهای فقط‌خواندنی، AsNoTracking معمولاً مصرف حافظه و هزینه Change Tracking را کاهش می‌دهد؛ بنابراین برای فهرست‌ها، گزارش‌ها و APIهای Read-only انتخاب خوبی است. اگر بعداً همان Entity را ویرایش کنید، EF Core تغییرات آن را خودکار تشخیص نمی‌دهد. در آن حالت یا Query را بدون AsNoTracking اجرا کنید، یا Entity را با Attach/Update به Context متصل کنید. برای خروجی صفحه بهتر است مستقیم به DTO پروژه کنید: var rows = await db.Courses .AsNoTracking() .Select(c => new CourseRow(c.Id, c.Title)) .ToListAsync(); این الگو هم داده اضافی نمی‌خواند و هم قصد فقط‌خواندنی Query را شفاف می‌کند.
▲ 14 ▼ 0