آموزش Tracking و No Tracking در EF Core

تهران آی تی / برنامــه نویــسـی / آموزش Tracking و No Tracking در EF Core

آموزش Tracking و No Tracking در EF Core

Tracking و No Tracking در EF Core یکی از پایه‌ای‌ترین و مهم‌ترین مباحث در نحوه مدیریت داده‌هاست. درک صحیح از این مفهوم می‌تواند در بهینه‌سازی عملکرد برنامه و جلوگیری از خطاهای منطقی بسیار تأثیرگذار باشد. مثال ها در Asp.Net Core مورد برسی قرار میگیرد.

زمانی که ما یک Query را اجرا میکنیم. بعد از اجرا در حافظه snapshot ای اف کور قرار میگیرد. و شما میتوانید در لاین های بعدی برنامه به آن دسترسی داشته باشید. این به معنای Track شدن است.

تفاوت Tracking و No Tracking

Tracking (پیش‌فرض) : EF Core تغییراتی که روی users انجام شود را در حافظه نگه می‌دارد و هنگام SaveChanges() اعمال می‌کند.

var users = context.Users.ToList(); // توسط EF Core ردیابی می‌شود

No Tracking : ای اف کور موجودیت‌ها را فقط برای خواندن (Read-Only) بارگیری می‌کند. و هیچ‌گونه تغییری روی آن‌ها ردیابی نمی‌شود. مناسب برای صفحات گزارش‌گیری، لیست‌های فقط خواندنی، APIهای GET بدون تغییر.

var users = context.Users.AsNoTracking().ToList(); // بدون ردیابی

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

  • افزایش کارایی در کوئری‌های Read-Only
  • کاهش مصرف حافظه
  • مناسب برای سناریوهایی که تغییر روی داده‌ها نیاز نیست

در سناریوهایی که صرفاً نیاز به نمایش داده‌ها است، استفاده از AsNoTracking() شدیداً توصیه می‌شود. اما در فرم‌های ویرایش یا عملیات‌های وابسته به context، Tracking ضروری است.

Change Tracking در EF Core

هنگامی که یک کوئری اجرا می‌شود. و موجودیت‌ها (Entities) از پایگاه داده واکشی می‌شوند. به‌صورت پیش‌فرض EF Core آن‌ها را ردیابی (Track) می‌کند. یعنی EF Core وضعیت اولیه موجودیت را در حافظه نگه می‌دارد. تا در صورت ایجاد تغییر، بتواند آن تغییرات را در زمان SaveChanges() به پایگاه داده اعمال کند. EF Core برای هر موجودیت، یکی از وضعیت‌های زیر را نگه می‌دارد:

  • وضعیت‌ Unchanged: بدون تغییر نسبت به دیتابیس
  • وضعیت‌ Modified: یکی از ویژگی‌های موجودیت تغییر کرده است
  • وضعیت‌ Added: موجودیت جدید است
  • وضعیت‌ Deleted: موجودیت برای حذف علامت‌گذاری میشود
  • وضعیت‌ Detached: ای اف کور این موجودیت را ردیابی نمی‌کند

بررسی وضعیت موجودیت‌ها با ChangeTracker

با این کد می‌توان وضعیت تمام موجودیت‌های در حال ردیابی را مشاهده کرد.

foreach (var entry in context.ChangeTracker.Entries())
{
Console.WriteLine($"Entity: {entry.Entity.GetType().Name}, State: {entry.State}");
}

یک مثال از کاربرد ChangeTracker

ممکن است نخواهید SaveChanges() را صدا بزنید مگر اینکه داده‌ای واقعاً تغییر کرده باشد. مثلا در آپدیت.

if (context.ChangeTracker.HasChanges())
{
context.SaveChanges();
}

مفهوم Tracking در EF Core پایه‌ای‌ترین قسمت رفتار EF است. و درک آن به موارد زیر کمک می‌کند.

  • عملکرد بهتری داشته باشیم
  • رفتار Entityها را کنترل کنیم
  • عملیات‌های نوشتن-خواندن را بهینه کنیم
جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد