হাসিব, মনে হচ্ছে তুমি ভুল করে ঠিক আগের Migrations লেকচারের ট্রান্সক্রিপ্টটাই আবার কপি-পেস্ট করেছো! 😅

আগের মেসেজেই আমি লিনাক্স টার্মিনালের কমান্ডসহ এটার বিস্তারিত পোস্টমর্টেম করেছি। তাই বোরিং রোবটের মতো হুবহু একই জিনিস রিপিট না করে, তোমার জন্য এই লেকচারটির একটি কুইক রিভিশন চিট-শিট (Cheat Sheet) বানিয়ে দিচ্ছি।

📝 Lecture Summary at a Glance

  • Migrations Concept: C# Model-এর পরিবর্তনগুলো ডাটাবেস টেবিলে অ্যাপ্লাই করার টুল বা স্ক্রিপ্ট।
  • Essential Packages: কাজ করার জন্য Microsoft.EntityFrameworkCore.Tools এবং Microsoft.EntityFrameworkCore.Design প্যাকেজগুলো প্রয়োজন।
  • Two Main Commands: মাইগ্রেশন জেনারেট করতে add-migration এবং ডাটাবেসে রিয়েল টেবিল বানাতে update-database ব্যবহার করা হয়।
  • Up & Down Methods: মাইগ্রেশন ফাইলে Up() মেথড ডাটাবেস মডিফাই করে, আর Down() মেথডটি রোলব্যাক বা আন্ডু (Undo) করার কাজ করে।

🧠 Comprehensive Breakdown & Deep Dive (Quick Recap)

১. The Two-Step Migration Process [Importance: 10/10]

  • The “Why”: মডেল ক্লাসে কোনো কলাম যোগ বা ডিলিট করলেই ডাটাবেস নিজে থেকে আপডেট হয় না। প্রথমে পরিবর্তনগুলোর একটি ভার্সন তৈরি করতে হয়, এরপর সেটি ডাটাবেসে পুশ করতে হয়।

💻 Cross-Platform CLI Implementation (যেহেতু তুমি লিনাক্সে কাজ করো):

# ১. মাইগ্রেশন ফাইল তৈরি করা (Track Changes)
dotnet ef migrations add Initial --project Entities --startup-project CrudExample
 
# ২. ডাটাবেসে অ্যাপ্লাই করা (Apply to Database)
dotnet ef database update --project Entities --startup-project CrudExample
 

২. The Missing Constructor Error [Importance: 9/10]

  • The “Why”: লেকচারার দেখিয়েছেন যে মাইগ্রেশন রান করার সময় ডাটাবেস প্রোভাইডার কনফিগারেশন পাচ্ছিল না। এর কারণ হলো Program.cs থেকে পাঠানো UseSqlServer() এর ইনস্ট্রাকশনটি রিসিভ করার জন্য DbContext ক্লাসে কোনো Constructor ছিল না।

💻 .NET 10 Code Implementation (Smart Approach): ট্র্যাডিশনাল কনস্ট্রাক্টরের বদলে আধুনিক .NET ভার্সনে তুমি Primary Constructor ব্যবহার করে কোড আরও ক্লিন রাখতে পারো:

using Microsoft.EntityFrameworkCore;
 
namespace Entities;
 
// ক্লাসের নামেই সরাসরি অপশন রিসিভ করা হয়েছে
public class PersonsDbContext(DbContextOptions<PersonsDbContext> options) : DbContext(options)
{
    public DbSet<Country> Countries { get; set; }
    public DbSet<Person> Persons { get; set; }
}
 

🚀 EF Core Migrations Best Practices

১. Never Edit Migration Files Manually: জেনারেট হওয়া মাইগ্রেশন ফাইলে নিজে থেকে হাত না দেওয়াই বেস্ট। যদি কোনো ভুল হয় বা মাইগ্রেশন নাম পছন্দ না হয়, তবে নিচের কমান্ড দিয়ে আগের অবস্থায় ফিরে যাবে:

dotnet ef migrations remove --project Entities --startup-project CrudExample
 

২. Keep Migrations in Version Control: তৈরি হওয়া মাইগ্রেশন ফাইলগুলো সবসময় Git-এ পুশ করবে। এতে তোমার প্রজেক্টের অন্য ডেভেলপাররা কোড পুল করে শুধু database update কমান্ড দিলেই তাদের মেশিনেও তোমার ডাটাবেসের হুবহু রেপ্লিকা তৈরি হয়ে যাবে।

লেকচারের শেষের কথা অনুযায়ী, এরপরের টপিকে ডাটাবেস থেকে ডাটা ফেচ করা বা EF CRUD অপারেশন নিয়ে আলোচনা হওয়ার কথা। তুমি এর পরের লেকচারটি দিলে আমি নতুন টপিক নিয়ে কাজ শুরু করে দেবো।