Tracking এবং No-Tracking হল Entity Framework এর দুটি গুরুত্বপূর্ণ কৌশল যা ডেটাবেস থেকে তথ্য পড়ার সময় কীভাবে রেকর্ডের পরিবর্তন ট্র্যাক করা হবে তা নিয়ন্ত্রণ করে। এগুলি প্রধানত পারফরম্যান্স এবং মেমরি ব্যবহারের সাথে সম্পর্কিত, এবং বিভিন্ন পরিস্থিতিতে এর ব্যবহার আলাদা হতে পারে।
Tracking Queries হল Entity Framework-এর ডিফল্ট আচরণ যেখানে ডেটাবেস থেকে একটি রেকর্ড পড়ার সময়, সেই রেকর্ডটি Entity Framework এর Change Tracker দ্বারা ট্র্যাক করা হয়। এর মানে হল যে, Entity Framework সেই রেকর্ডের উপর যে কোন পরিবর্তন চিহ্নিত করবে এবং SaveChanges()
কল করার পর, সেই পরিবর্তন ডেটাবেসে সেভ হবে।
এটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি রেকর্ডগুলি পরিবর্তন করতে চান এবং সেগুলির উপর কিছু অ্যাকশন নিতে চান, যেমন আপডেট বা ডিলিট করা।
var student = db.Students.FirstOrDefault(s => s.StudentId == 1);
student.Name = "Updated Name";
// EF will track the changes to this student
db.SaveChanges(); // The update will be saved to the database
এখানে:
SaveChanges()
কল করার পর সেই পরিবর্তন ডেটাবেসে আপডেট হবে।No-Tracking Queries তখন ব্যবহার করা হয় যখন আপনি শুধুমাত্র ডেটা পড়তে চান এবং ডেটাবেসে কোনো পরিবর্তন করতে চান না। এই কৌশলে Entity Framework ডেটাবেস থেকে ডেটা লোড করার সময় Change Tracker ব্যবহার করে না। এর ফলে, Tracking Queries এর তুলনায় মেমরি ব্যবহারের পরিমাণ কম হয় এবং পারফরম্যান্স ভালো হয়, বিশেষত যখন শুধু রিড অপারেশন করা হচ্ছে এবং ডেটাবেসে কোনো আপডেট বা ডিলিট করতে হবে না।
var students = db.Students.AsNoTracking().ToList();
এখানে:
.AsNoTracking()
মেথডটি নির্দেশ করে যে Entity Framework এই কুয়েরি থেকে প্রাপ্ত রেকর্ডগুলিকে ট্র্যাক করবে না।বৈশিষ্ট্য | Tracking Queries | No-Tracking Queries |
---|---|---|
ডেটা ট্র্যাকিং | Entity Framework রেকর্ডের পরিবর্তন ট্র্যাক করে। | রেকর্ডের কোনো পরিবর্তন ট্র্যাক করা হয় না। |
পারফরম্যান্স | মেমরি এবং পারফরম্যান্সের উপর বেশি প্রভাব পড়ে, কারণ Entity Framework প্রতিটি রেকর্ডের পরিবর্তন ট্র্যাক করে। | দ্রুত, কারণ ডেটা শুধু পড়া হয়, পরিবর্তন ট্র্যাক করা হয় না। |
ব্যবহার | যখন আপনি রেকর্ড পরিবর্তন (যেমন, Update বা Delete) করতে চান। | যখন আপনি শুধুমাত্র ডেটা রিড করতে চান এবং পরিবর্তন করতে চান না। |
মেমরি ব্যবহার | বেশি মেমরি ব্যবহার করে কারণ রেকর্ডের স্টেট ট্র্যাক করা হয়। | কম মেমরি ব্যবহার হয় কারণ কোনো স্টেট ট্র্যাক করা হয় না। |
AsNoTracking()
মেথডটি কেবল IQueryable কুয়েরি সম্পর্কিত, তাই এটি কেবল লিস্টে রিটার্ন হওয়া রেকর্ডগুলির জন্য কাজ করে। এটি কুয়েরি স্ট্রিমিং এর সময় Entity Framework কে বলছে যে, কোনো পরিবর্তন ট্র্যাক করো না, যেহেতু এই রেকর্ডগুলির জন্য কোনো আপডেট বা ডিলিট হবে না।
var students = db.Students.AsNoTracking().Where(s => s.Age > 20).ToList();
এখানে:
.AsNoTracking()
মেথডের মাধ্যমে এই ডেটার কোনো পরিবর্তন ট্র্যাক করা হবে না।Tracking Queries এবং No-Tracking Queries এর মধ্যে পার্থক্য মেমরি ব্যবহারের ও পারফরম্যান্সের দিক থেকে গুরুত্বপূর্ণ। Tracking Queries তখনই ব্যবহার করুন যখন আপনি ডেটার সাথে পরিবর্তন করতে চান এবং No-Tracking তখনই ব্যবহার করুন যখন আপনি শুধু রিড-অপারেশন করছেন এবং পারফরম্যান্সে আরও উন্নতি চান।
common.read_more