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