EF Core Tracking

হ্যাঁ ✅ — default ভাবে DbContext দিয়ে যেকোনো entity query করলে সেটা tracked হয় (যদি তুমি AsNoTracking() ব্যবহার না করো)।

এখন পুরো বিষয়টা পরিষ্কারভাবে বুঝি 👇


🎯 Default Behavior কী?

এই ধরনের query:

var region = await dbContext.Regions
                            .FirstOrDefaultAsync(x => x.Id == id);

👉 EF Core automatically এটাকে track করে।

মানে:

  • Entity memory তে আসে
  • DbContext এর Change Tracker এ register হয়
  • Property change করলে EF detect করতে পারে

🧠 Tracking মানে কী?

EF Core internally রাখে:

Original Values
Current Values
State (Unchanged / Modified / Added / Deleted)

🔥 Example

var region = await dbContext.Regions.FirstOrDefaultAsync(x => x.Id == id);

region.Name = "NewName";

await dbContext.SaveChangesAsync();

এখানে:

  • EF জানে Name change হয়েছে
  • UPDATE query generate করবে

❗ কিন্তু কখন track হয় না?

যদি তুমি লিখো:

var region = await dbContext.Regions
                            .AsNoTracking()
                            .FirstOrDefaultAsync(x => x.Id == id);

তখন:

❌ EF track করবে না
❌ Property change detect করবে না
❌ SaveChangesAsync() দিলে update হবে না


🧩 Tracking কেন default?

কারণ EF Core assume করে:

তুমি হয়তো entity modify করতে পারো

তাই default behaviour = tracking enabled


🚀 কখন AsNoTracking ব্যবহার করবো?

যখন:

  • শুধু read-only data লাগবে
  • Update করার দরকার নেই
  • Performance improve করতে চাই

Example:

var regions = await dbContext.Regions
                             .AsNoTracking()
                             .ToListAsync();

এতে:

✔ Faster query
✔ Less memory use


🧠 Performance Insight

Tracking করলে EF:

  • Snapshot রাখে
  • Change compare করে
  • Memory বেশি লাগে

Large list query করলে AsNoTracking ভালো।


🎯 Summary

Query TypeTracking
Normal query✅ Yes
AsNoTracking()❌ No
Add()State = Added
Remove()State = Deleted

⚡ Advanced Insight

DbContext lifetime যদি scoped হয় (যেটা default web request এ হয়),
তাহলে request শেষ হলে tracking context destroy হয়ে যায়।


এখন একটা advanced প্রশ্ন 😄

যদি একই DbContext এ একই Id এর entity দুইবার query করো,
তাহলে কি দুইটা আলাদা object বানাবে?
নাকি same tracked instance return করবে? 🔥

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top