Code First একটি পদ্ধতি, যেখানে ডেভেলপাররা প্রথমে C# বা VB.NET কোডে ক্লাস (এবং মডেল) তৈরি করেন, এবং তারপর Entity Framework (EF) এই কোড থেকে ডেটাবেস স্কিমা তৈরি করে। এটি ORM এর একটি গুরুত্বপূর্ণ অংশ, যেখানে ডেভেলপাররা ডেটাবেসের কাঠামো (schema) তৈরি করার আগে কোড লেখেন এবং EF সেই কোড থেকে ডেটাবেস তৈরি করে বা মাইগ্রেট করে।
Code First Approach সাধারণত ছোট অ্যাপ্লিকেশন বা নতুন প্রজেক্টগুলিতে ব্যবহৃত হয়, যেখানে ডেটাবেস স্কিমা শুরু থেকেই কোডের মধ্যেই নির্ধারিত হয় এবং সময়ের সাথে সাথে কোড এবং ডেটাবেসের মধ্যে সিঙ্ক্রোনাইজেশন রক্ষা করা হয়।
Code First অ্যাপ্রোচটি মূলত দুটি প্রধান ধাপে কাজ করে: ডোমেইন মডেল তৈরি এবং ডেটাবেস তৈরি বা আপডেট।
প্রথমে আপনি C# কোডে মডেল ক্লাস তৈরি করবেন, যেখানে ক্লাসের প্রপার্টি গুলি ডেটাবেসের কলাম হিসাবে কাজ করবে। উদাহরণস্বরূপ:
public class Student
{
public int Id { get; set; } // Primary Key
public string Name { get; set; }
public int Age { get; set; }
}
এখানে, Student
ক্লাসটি ডেটাবেসের Students
টেবিলের মতো কাজ করবে, এবং Id
, Name
, Age
এর মতো প্রপার্টিগুলি টেবিলের কলাম হিসাবে মডেল হবে।
DbContext
একটি ক্লাস যা EF কে ডেটাবেসের সাথে যোগাযোগ করার অনুমতি দেয়। এটি ডেটাবেস টেবিলগুলির প্রতিনিধিত্বকারী DbSet
প্রপার্টিগুলি ধারণ করে। উদাহরণস্বরূপ:
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
}
এখানে, SchoolContext
ক্লাসটি ডেটাবেসের সাথে সংযুক্ত, এবং Students
একটি DbSet যা ডেটাবেসে Student
ক্লাসের প্রতিনিধিত্ব করবে।
এবার আপনি ডোমেইন মডেল ও DbContext তৈরি করার পর, Entity Framework এর মাধ্যমে ডেটাবেস তৈরি বা মাইগ্রেট করতে পারেন। মাইগ্রেশন ব্যবহারের জন্য নিচের কমান্ডগুলি ব্যবহার করা হয়:
প্রথমে মাইগ্রেশন অ্যাড করতে হবে:
Add-Migration InitialCreate
তারপর ডেটাবেস আপডেট করতে হবে:
Update-Database
এটি EF কে বলে দিবে যে নতুন ডেটাবেস স্কিমা তৈরি করতে হবে এবং মাইগ্রেশন অনুযায়ী আপডেট করতে হবে।
Code First এ মডেল কনফিগারেশন করার দুটি মূল উপায় রয়েছে: Data Annotations এবং Fluent API।
Data Annotations হল কিছু বিশেষ অ্যাট্রিবিউট যা ক্লাস এবং প্রপার্টির উপরে অ্যাপ্লাই করা হয়, যাতে তাদের বৈশিষ্ট্য এবং সম্পর্ক ডেটাবেসের সাথে সঠিকভাবে ম্যাপ হয়। উদাহরণস্বরূপ:
public class Student
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[Range(1, 100)]
public int Age { get; set; }
}
এখানে, [Key]
অ্যাট্রিবিউট Id
প্রপার্টিকে প্রাইমারি কী হিসেবে চিহ্নিত করেছে, [Required]
অ্যাট্রিবিউট Name
প্রপার্টি কে বাধ্যতামূলক করেছে এবং [StringLength(50)]
অ্যাট্রিবিউট এর দৈর্ঘ্য সীমাবদ্ধ করেছে।
Fluent API একে অপরের সাথে সোজা ও চেইনযোগ্য মেথড কলিং স্টাইল ব্যবহার করে কনফিগারেশন তৈরি করার পদ্ধতি। এটি অনেক সময় ব্যবহার করা হয় যখন Data Annotations যথেষ্ট নয়। উদাহরণস্বরূপ:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.HasMaxLength(50)
.IsRequired();
}
এই Fluent API কনফিগারেশনটি Name
প্রপার্টি কে ৫০ ক্যারেক্টারের মধ্যে সীমাবদ্ধ করবে এবং এটিকে Required হিসেবে চিহ্নিত করবে।
বৈশিষ্ট্য | Code First | Database First |
---|---|---|
ডেটাবেস সৃষ্টি | কোড লেখার মাধ্যমে ডেটাবেস তৈরি হয়। | ডেটাবেস আগে তৈরি করতে হয়, তারপর কোড জেনারেট হয়। |
ডেভেলপার নিয়ন্ত্রণ | কোডে পূর্ণ নিয়ন্ত্রণ, ডেটাবেস স্কিমা কোড দ্বারা নির্ধারিত। | ডেটাবেসের স্কিমা আগেই নির্ধারিত, কোড তার সাথে সিঙ্ক হয়। |
ডেটাবেস মডেল পরিবর্তন | কোড পরিবর্তন করে মডেল পরিবর্তন করা যায়। | ডেটাবেস পরিবর্তন করে কোডের মডেল আপডেট করতে হয়। |
ব্যবহার উপযুক্ত | নতুন প্রজেক্টে, সহজ ডেটাবেস ডিজাইন ও কনফিগারেশন। | যখন ডেটাবেস পূর্বে তৈরি এবং তা নিয়ে কাজ করতে হয়। |
Code First Approach ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা ডেটাবেস স্কিমা এবং কোডের মধ্যে সুসংগতি বজায় রাখতে সহায়তা করে, বিশেষ করে ছোট বা নতুন প্রজেক্টগুলিতে।
Code First পদ্ধতিতে ডেভেলপাররা ডেটাবেসের কাঠামো (schema) কোডের মাধ্যমে তৈরি করেন, এবং Entity Framework (EF) সেই কোডের ভিত্তিতে ডেটাবেস তৈরি বা মাইগ্রেট করে। এর মানে হল যে প্রথমে আপনি C# ক্লাস বা মডেল তৈরি করবেন, পরে EF এই ক্লাসগুলোকে ডেটাবেস টেবিল ও কলামে রূপান্তর করবে। Code First অ্যাপ্রোচ ডেভেলপারদের মডেল ক্লাসগুলোর মাধ্যমে ডেটাবেসের কাঠামো নিয়ন্ত্রণ করার সুযোগ দেয়, এবং এভাবে আপনি ম্যানুয়ালি ডেটাবেস ডিজাইন করার প্রয়োজন ছাড়াই কোডের মধ্য দিয়েই ডেটাবেস পরিচালনা করতে পারেন।
Code First পদ্ধতিতে ডেটাবেসের কাঠামো সম্পূর্ণভাবে কোডের উপর নির্ভরশীল, তাই আপনাকে ডেটাবেস ডিজাইন করতে বা পরিবর্তন করতে কোন অতিরিক্ত টুলস বা সফটওয়্যার ব্যবহার করতে হয় না। আপনি শুধুমাত্র ক্লাসগুলো ডিজাইন করেন এবং Entity Framework সেগুলোকে ডেটাবেস টেবিল ও কলামে রূপান্তরিত করে।
Code First মাইগ্রেশন ফিচারটি ডেটাবেসের কাঠামোতে যেকোনো পরিবর্তন বা আপডেট সহজ করে তোলে। আপনি যখন কোডে পরিবর্তন করবেন (যেমন নতুন প্রপার্টি যোগ করা বা মডেল পরিবর্তন), তখন EF এই পরিবর্তনগুলো ডেটাবেসে সিঙ্ক করার জন্য মাইগ্রেশন তৈরি করতে পারে, যা Add-Migration
এবং Update-Database
কমান্ড দিয়ে করা হয়।
Code First অ্যাপ্রোচ ডেভেলপারদের জন্য খুব নমনীয়, কারণ আপনি কোডের মাধ্যমে ডেটাবেস মডেল নিয়ন্ত্রণ করতে পারেন। বিভিন্ন ধরনের ডেটাবেস কনফিগারেশন (যেমন টেবিল নাম, প্রাইমারি কী, সম্পর্ক ইত্যাদি) Fluent API অথবা Data Annotations ব্যবহার করে করা যায়।
Code First অ্যাপ্রোচে, আপনি প্রথমে কোড লিখে শুরু করতে পারেন, তারপর ডেটাবেস তৈরি বা আপডেট করতে পারেন। এটি নতুন অ্যাপ্লিকেশন বা প্রকল্পের জন্য আদর্শ, যেখানে আপনি ডেটাবেসের কাঠামো কোডের মধ্যে সম্পূর্ণভাবে সংজ্ঞায়িত করতে চান।
Code First মাইগ্রেশন ব্যবহারের মাধ্যমে, আপনি কোডে পরিবর্তন আনার পর ডেটাবেসের কাঠামো আপডেট করতে পারেন, এবং কোনো রকম ডেটা হারানোর ঝুঁকি ছাড়াই ডেটাবেস ম্যানেজমেন্ট করতে পারেন। EF স্বয়ংক্রিয়ভাবে নতুন মাইগ্রেশন এবং সিঙ্ক করতে সহায়তা করে।
এই সব সুবিধার কারণে, Code First পদ্ধতি নতুন অ্যাপ্লিকেশন উন্নয়নের জন্য অত্যন্ত উপযুক্ত, যেখানে কোডের মাধ্যমে ডেটাবেস কাঠামো তৈরি ও আপডেট করার জন্য নমনীয়তা এবং সহজতর সমাধান প্রয়োজন।
Entity Framework-এ Code First অ্যাপ্রোচ ব্যবহার করলে, প্রথমে আপনাকে Entity Class তৈরি করতে হয়, যা আপনার ডেটাবেসের টেবিলগুলির প্রতিনিধিত্ব করবে। এরপর, এই Entity Class-এর সাথে সম্পর্কযুক্ত DbContext ক্লাস তৈরি করতে হয়, যা ডেটাবেসের সাথে যোগাযোগ এবং CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করবে।
এখানে Entity Class এবং DbContext তৈরির প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হলো।
Entity Class হলো একটি C# ক্লাস যা ডেটাবেস টেবিলের একটি একক এন্টিটি বা রেকর্ডের প্রতিনিধিত্ব করে। এর মধ্যে প্রপার্টি গুলি ডেটাবেসের টেবিলের কলামের মতো কাজ করে।
ধরা যাক, আমরা একটি "Student" নামক Entity Class তৈরি করতে যাচ্ছি, যেখানে ছাত্রের Id
, Name
এবং Age
থাকবে। Entity Classটি দেখতে এরকম হবে:
public class Student
{
public int Id { get; set; } // Primary Key
public string Name { get; set; }
public int Age { get; set; }
}
এখানে:
Id
প্রপার্টিটি ডেটাবেসের প্রাইমারি কী (Primary Key) হিসেবে কাজ করবে।Name
এবং Age
প্রপার্টি দুটি টেবিলের কলাম হিসেবে কাজ করবে।এটি Entity Framework এর জন্য একটি Entity Class, যা ডেটাবেসের একটি টেবিলের প্রতিনিধিত্ব করে।
এছাড়া, আপনি Data Annotations ব্যবহার করে Entity Class-এ কিছু কনফিগারেশনও দিতে পারেন, যেমন:
public class Student
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[Range(5, 100)]
public int Age { get; set; }
}
এখানে:
[Key]
: Id
প্রপার্টি কে প্রাইমারি কী হিসেবে চিহ্নিত করছে।[Required]
: Name
প্রপার্টি এখন বাধ্যতামূলক হয়ে গেছে।[StringLength(100)]
: Name
এর সর্বোচ্চ দৈর্ঘ্য 100 অক্ষর হবে।[Range(5, 100)]
: Age
প্রপার্টি ৫ থেকে ১০০ এর মধ্যে থাকতে হবে।এভাবে, Data Annotations দিয়ে Entity Class এর মধ্যে কনফিগারেশন করা হয়।
DbContext হলো Entity Framework-এর প্রধান ক্লাস যা ডেটাবেসের সাথে যোগাযোগ করে এবং Entity ক্লাসগুলোর প্রতিনিধিত্বকারী DbSet প্রপার্টি ধারণ করে। DbContext-ই ডেটাবেস অপারেশনগুলিকে পরিচালনা করে।
DbContext তৈরি করতে হলে, আপনাকে একটি ক্লাস তৈরি করতে হবে যা DbContext ক্লাস থেকে উত্তরাধিকারী (inherit) হবে এবং সেই ক্লাসে DbSet প্রপার্টি ডিফাইন করতে হবে। প্রতিটি DbSet একটি Entity Class এর প্রতিনিধিত্ব করে এবং এটি ডেটাবেসের একটি টেবিলের মতো কাজ করে।
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
}
এখানে:
SchoolContext
একটি DbContext ক্লাস যা ডেটাবেসের সাথে যোগাযোগ করে।DbSet<Student>
প্রপার্টি একটি টেবিল হিসেবে Student
Entity Class-এর প্রতিনিধিত্ব করবে।DbContext-এ আপনি OnConfiguring
মেথডও ওভাররাইড করে ডেটাবেসের কানেকশন স্ট্রিং কনফিগার করতে পারেন। উদাহরণস্বরূপ:
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("your_connection_string_here");
}
}
এখানে UseSqlServer
মেথডের মাধ্যমে আমরা SQL Server ডেটাবেসের কানেকশন স্ট্রিং উল্লেখ করছি। আপনি এখানে অন্য ডেটাবেস (যেমন SQLite, PostgreSQL ইত্যাদি) ব্যবহার করার জন্য উপযুক্ত মেথড ব্যবহার করতে পারেন।
DbContext ব্যবহার করে আমরা ডেটাবেসে CRUD অপারেশন করতে পারি। নিচে একটি সাধারণ উদাহরণ দেয়া হলো, যেখানে আমরা Student
Entity ক্লাস ব্যবহার করে ডেটাবেসে একটি নতুন Student
যুক্ত করব এবং তা রিড (read) করব।
using (var context = new SchoolContext())
{
var student = new Student
{
Name = "John Doe",
Age = 21
};
context.Students.Add(student);
context.SaveChanges(); // ডেটাবেসে পরিবর্তন সংরক্ষণ
}
এখানে:
Add()
মেথড ব্যবহার করে আমরা নতুন Student
যুক্ত করছি।SaveChanges()
মেথড ব্যবহার করে ডেটাবেসে পরিবর্তন সংরক্ষণ করা হচ্ছে।using (var context = new SchoolContext())
{
var student = context.Students.FirstOrDefault(s => s.Name == "John Doe");
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}
এখানে:
FirstOrDefault()
মেথড ব্যবহার করে আমরা Name
দ্বারা Student
খুঁজে পাচ্ছি।DbSet
প্রপার্টি হিসেবে সংরক্ষিত থাকে এবং আপনি এই প্রপার্টি ব্যবহার করে CRUD অপারেশন পরিচালনা করতে পারেন।এভাবে Entity Class এবং DbContext ব্যবহার করে আপনি Entity Framework Code First অ্যাপ্রোচে ডেটাবেস ম্যানেজমেন্ট করতে পারেন।
Entity Framework (EF) ব্যবহার করার সময়, ডেটাবেস তৈরি এবং আপডেট করার জন্য Database Initialization এবং Data Migrations দুটি গুরুত্বপূর্ণ প্রক্রিয়া। এই প্রক্রিয়াগুলো আপনাকে ডেটাবেসের স্কিমা (structure) এবং ডেটা পরিচালনার জন্য সাহায্য করে, যাতে আপনি সহজে ডেটাবেসের পরিবর্তন পরিচালনা করতে পারেন এবং অ্যাপ্লিকেশন চালানোর সময় ডেটাবেসে স্বয়ংক্রিয়ভাবে আপডেট বা ইনিশিয়ালাইজেশন করতে পারেন।
Database Initialization এর মাধ্যমে, ডেটাবেসটি প্রথমবারের মতো তৈরি করা হয়, অথবা ডেটাবেসে কিছু ডিফল্ট ডেটা ইনজেক্ট করা হয়। EF তে এই ইনিশিয়ালাইজেশন প্রক্রিয়া DatabaseInitializer বা DbContext এর মাধ্যমে পরিচালিত হয়।
CreateDatabaseIfNotExists
এটি ডিফল্ট ইনিশিয়ালাইজার, যা নিশ্চিত করে যে ডেটাবেসটি যদি আগে থেকে না থাকে, তবে সেটি স্বয়ংক্রিয়ভাবে তৈরি হবে।
public class MyDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new CreateDatabaseIfNotExists<MyDbContext>());
}
}
DropCreateDatabaseIfModelChanges
এই অপশনটি ব্যবহার করলে, যখন মডেলের কোন পরিবর্তন হবে (যেমন Entity Class এ কোনো প্রোপার্টি যুক্ত করা বা মুছে ফেলা), তখন পুরোনো ডেটাবেসটি ডিলিট করে নতুন ডেটাবেস তৈরি হবে।
public class MyDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
}
}
DropCreateDatabaseAlways
এই অপশনটি ব্যবহার করলে, প্রতিবার অ্যাপ্লিকেশন চালু হলে ডেটাবেসটি ডিলিট হয়ে আবার তৈরি হবে, এটি সাধারণত টেস্টিং বা ডেভেলপমেন্ট সময় ব্যবহৃত হয়।
public class MyDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
}
}
Custom Database Initializer
আপনি নিজের কাস্টম ইনিশিয়ালাইজারও তৈরি করতে পারেন, যা প্রয়োজন অনুযায়ী ডেটাবেস তৈরির সময় নির্দিষ্ট কিছু কাস্টমাইজেশন করতে সাহায্য করে।
public class MyDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new CustomDatabaseInitializer());
}
}
public class CustomDatabaseInitializer : IDatabaseInitializer<MyDbContext>
{
public void InitializeDatabase(MyDbContext context)
{
if (!context.Database.Exists())
{
context.Database.Create();
// Additional custom logic (e.g., seeding data)
}
}
}
Data Migrations Entity Framework এর একটি অত্যন্ত শক্তিশালী ফিচার, যার মাধ্যমে ডেটাবেস স্কিমার পরিবর্তন এবং আপডেট খুব সহজে পরিচালনা করা যায়। যখন আপনি আপনার Entity Model (class) বা DbContext এ কোনো পরিবর্তন করেন, তখন Data Migrations এর মাধ্যমে ডেটাবেসের সংশ্লিষ্ট পরিবর্তনগুলো ট্র্যাক এবং আপডেট করা হয়।
Migrations Enable করা
Package Manager Console এ নিচের কমান্ডটি ব্যবহার করুন:
Enable-Migrations
এই কমান্ডটি আপনার প্রোজেক্টে একটি Migrations ফোল্ডার তৈরি করবে, যেখানে মাইগ্রেশন সংক্রান্ত ফাইলগুলো রাখা হবে।
New Migration Create করা
যখন আপনি আপনার Entity বা DbContext ক্লাসে কোনো পরিবর্তন করবেন (যেমন নতুন টেবিল বা কলাম যোগ করা), তখন নতুন মাইগ্রেশন তৈরি করতে হবে। এটি করতে নিচের কমান্ডটি ব্যবহার করুন:
Add-Migration InitialCreate
এখানে InitialCreate
হচ্ছে মাইগ্রেশনের নাম, যা আপনি আপনার প্রয়োজনে পরিবর্তন করতে পারেন। মাইগ্রেশন ফাইলটি Migrations ফোল্ডারে তৈরি হবে এবং এটি ডেটাবেসের পরিবর্তনগুলো ট্র্যাক করবে।
Database Update করা
নতুন মাইগ্রেশন তৈরি করার পর, আপনি ডেটাবেস আপডেট করার জন্য নিচের কমান্ডটি ব্যবহার করতে পারেন:
Update-Database
এটি আপনার ডেটাবেসকে বর্তমান মডেল এবং মাইগ্রেশন অনুযায়ী আপডেট করবে।
Rollback করা
যদি আপনি কোনো মাইগ্রেশন এর আগে ফিরে যেতে চান, তাহলে Update-Database
কমান্ডের সঙ্গে -TargetMigration
প্যারামিটার ব্যবহার করে পূর্ববর্তী মাইগ্রেশনে ফিরে যেতে পারেন:
Update-Database -TargetMigration: "PreviousMigration"
Data Seeding: মাইগ্রেশন প্রক্রিয়ার সাথে আপনি ডিফল্ট ডেটা ইনসার্ট করতে পারেন, যা ডেটাবেস তৈরি বা আপডেটের সময় স্বয়ংক্রিয়ভাবে ইনজেক্ট হবে। এর জন্য মাইগ্রেশন ফাইলে Seed
মেথড ব্যবহার করা হয়।
protected override void Seed(MyDbContext context)
{
context.Users.AddOrUpdate(u => u.UserId, new User { Name = "John Doe", Email = "john@example.com" });
}
Database Initialization এবং Data Migrations হল Entity Framework এ ডেটাবেস পরিচালনার অত্যন্ত গুরুত্বপূর্ণ টুল। ডেটাবেস তৈরি বা আপডেট করার জন্য EF এর মাইগ্রেশন ব্যবস্থাপনা ব্যবহার করা খুবই কার্যকরী। মাইগ্রেশন এবং ইনিশিয়ালাইজেশন ব্যবহারের মাধ্যমে ডেভেলপাররা দ্রুত এবং নিরাপদভাবে ডেটাবেসের পরিবর্তনগুলি পরিচালনা করতে পারেন, ফলে অ্যাপ্লিকেশনের ডেভেলপমেন্ট প্রক্রিয়া অনেক বেশি কার্যকরী ও অটোমেটেড হয়ে ওঠে।
Entity Framework (EF) ব্যবহার করার সময়, ডেটাবেস মডেল কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। আপনি Entity Framework-এর মাধ্যমে ডেটাবেস স্কিমা কনফিগার করার জন্য দুটি প্রধান পদ্ধতি ব্যবহার করতে পারেন: Fluent API এবং Data Annotation। দুটি পদ্ধতিই মডেল ক্লাসের বিভিন্ন বৈশিষ্ট্য নির্ধারণ করতে সাহায্য করে, তবে তাদের ব্যবহার এবং কার্যকারিতায় কিছু পার্থক্য রয়েছে। এই টিউটোরিয়ালে, আমরা Fluent API এবং Data Annotation এর মাধ্যমে Entity Framework মডেল কনফিগার করার পদ্ধতি আলোচনা করব।
Data Annotation হল একটি সিম্পল এবং ডেকোরেটিভ পদ্ধতি, যা মডেল ক্লাসের প্রপার্টিতে অটোমেটিক কনফিগারেশন যুক্ত করতে ব্যবহৃত হয়। এটি মূলত ক্লাস এবং প্রপার্টি লেভেলে অ্যাট্রিবিউট ব্যবহার করে মডেল কনফিগার করে।
[Key]: এটি প্রপার্টিকে Primary Key হিসেবে চিহ্নিত করে।
public class Student
{
[Key]
public int StudentId { get; set; }
}
[Required]: প্রপার্টি অবশ্যই পূর্ণ করতে হবে।
public class Student
{
public int StudentId { get; set; }
[Required]
public string Name { get; set; }
}
[StringLength]: একটি প্রপার্টির সর্বোচ্চ বা সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করে।
public class Student
{
public int StudentId { get; set; }
[StringLength(100, MinimumLength = 3)]
public string Name { get; set; }
}
[Column]: প্রপার্টির জন্য কাস্টম কলাম নাম নির্ধারণ করে।
public class Student
{
[Column("Student_Name")]
public string Name { get; set; }
}
[ForeignKey]: একটি প্রপার্টি ফোরেন কী (Foreign Key) হিসেবে কাজ করবে তা চিহ্নিত করে।
public class Student
{
public int StudentId { get; set; }
[ForeignKey("Course")]
public int CourseId { get; set; }
}
[Range]: একটি প্রপার্টির জন্য একটি নির্দিষ্ট রেঞ্জ নির্ধারণ করে।
public class Student
{
public int StudentId { get; set; }
[Range(18, 60)]
public int Age { get; set; }
}
Fluent API হল আরও ফ্লেক্সিবল এবং শক্তিশালী কনফিগারেশন পদ্ধতি, যা DbContext ক্লাসের OnModelCreating
মেথডে ব্যবহৃত হয়। এটি ডেটাবেসের আচরণ এবং কাঠামো কনফিগার করার জন্য খুবই উপযোগী এবং Data Annotation এর তুলনায় আরও বেশি কনফিগারেশন কাস্টমাইজেশন প্রদান করে।
Primary Key Configuration: Fluent API এর মাধ্যমে একটি প্রপার্টি প্রাইমারি কী (Primary Key) হিসেবে কনফিগার করা যায়।
modelBuilder.Entity<Student>()
.HasKey(s => s.StudentId);
Required Field Configuration: কোনো প্রপার্টি নাল (null) হতে পারবে না, এটি কনফিগার করতে Fluent API ব্যবহার করা হয়।
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.IsRequired();
Max Length এবং Min Length Configuration: প্রপার্টির সর্বোচ্চ ও সর্বনিম্ন দৈর্ঘ্য কনফিগার করা।
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.HasMaxLength(100)
.HasMinLength(3);
Foreign Key Configuration: Fluent API ব্যবহার করে একটি ফোরেন কী (Foreign Key) সম্পর্ক কনফিগার করা।
modelBuilder.Entity<Student>()
.HasOne(s => s.Course)
.WithMany(c => c.Students)
.HasForeignKey(s => s.CourseId);
Table and Column Naming: Fluent API ব্যবহার করে টেবিল ও কলামের নাম পরিবর্তন করা।
modelBuilder.Entity<Student>()
.ToTable("StudentsTable");
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.HasColumnName("Student_Name");
Indexing: প্রপার্টির উপর ইনডেক্স তৈরি করতে Fluent API ব্যবহার করা হয়।
modelBuilder.Entity<Student>()
.HasIndex(s => s.Name)
.IsUnique();
বৈশিষ্ট্য | Data Annotation | Fluent API |
---|---|---|
কনফিগারেশন স্তর | সরল এবং সোজা; মডেল ক্লাসে কনফিগারেশন করা হয়। | শক্তিশালী এবং বিস্তারিত কনফিগারেশন সম্ভব। |
কাস্টমাইজেশন | সীমিত কাস্টমাইজেশন প্রদান করে। | উন্নত কাস্টমাইজেশন এবং ফ্লেক্সিবল কনফিগারেশন। |
উপযোগিতা | ছোট প্রজেক্ট বা সহজ কনফিগারেশন সমাধান। | বৃহৎ প্রজেক্টে বা জটিল কনফিগারেশন প্রয়োজন হলে উপযোগী। |
কোডের পরিমাণ | কম কোড, সরাসরি প্রপার্টিতে অ্যাট্রিবিউট ব্যবহার। | কিছুটা বেশি কোড লিখতে হয়, তবে আরও শক্তিশালী কনফিগারেশন। |
Data Annotation এবং Fluent API দুটি শক্তিশালী পদ্ধতি Entity Framework মডেল কনফিগার করার জন্য। যেখানে Data Annotation দ্রুত এবং সরল কনফিগারেশন এর জন্য উপযোগী, সেখানে Fluent API অধিক কাস্টমাইজেশন এবং শক্তিশালী কনফিগারেশন প্রদান করে। Data Annotation সাধারণত ছোট প্রজেক্ট বা সহজ মডেল কনফিগারেশনের জন্য উপযুক্ত, আর Fluent API বড় প্রজেক্টে এবং জটিল ডেটাবেস কনফিগারেশনে বেশি কার্যকরী। Entity Framework-এ দুটি পদ্ধতিই একসঙ্গে ব্যবহার করা যেতে পারে, তবে প্রজেক্টের চাহিদা অনুযায়ী আপনি যে পদ্ধতিটি প্রয়োজন মনে করবেন, সেটি বেছে নিতে পারেন।
common.read_more