Entity Framework (EF) এ Primary Key এবং Foreign Key কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি ডেটাবেস টেবিলগুলোর মধ্যে সম্পর্ক স্থাপন করে এবং ডেটাবেসের এককরণ এবং অখণ্ডতা (data integrity) নিশ্চিত করে। Primary Key টেবিলের প্রতিটি রেকর্ডের জন্য একক চিহ্নিতকারী হিসেবে কাজ করে, এবং Foreign Key এক টেবিলের রেকর্ডকে অন্য টেবিলের সাথে যুক্ত করে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে EF-এ Primary Key এবং Foreign Key কনফিগার করা হয়।
Primary Key একটি টেবিলের প্রতিটি রেকর্ডকে ইউনিকভাবে চিহ্নিত করতে ব্যবহৃত হয়। EF-এ, প্রতিটি Entity ক্লাসের মধ্যে একটি প্রপার্টি যা Primary Key হিসেবে কাজ করে তা কনফিগার করা হয়। EF স্বয়ংক্রিয়ভাবে Id
বা {ClassName}Id
প্রপার্টিকে Primary Key হিসেবে শনাক্ত করে, তবে আপনি নিজে কাস্টম প্রপার্টি দিয়ে এই কনফিগারেশন করতে পারেন।
public class Student
{
[Key] // Primary Key কনফিগারেশন
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
এখানে:
StudentId
প্রপার্টি Primary Key হিসেবে কাজ করছে।[Key]
Data Annotation ব্যবহার করে StudentId
কে Primary Key হিসেবে চিহ্নিত করা হয়েছে।Fluent API ব্যবহার করে Primary Key কনফিগারেশন:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasKey(s => s.StudentId); // Fluent API দিয়ে Primary Key কনফিগারেশন
}
এখানে:
HasKey(s => s.StudentId)
Fluent API ব্যবহার করে StudentId
কে Primary Key হিসেবে কনফিগার করা হয়েছে।Foreign Key এক টেবিলের রেকর্ডকে অন্য টেবিলের রেকর্ডের সাথে সম্পর্কিত করে। EF তে Foreign Key কনফিগারেশন করতে হলে, দুটি টেবিলের মধ্যে সম্পর্ক স্থাপন করতে হয়, যেমন এক Student অনেক Course পড়তে পারে, বা একটি Order একটি Customer এর সাথে সম্পর্কিত হতে পারে।
EF তে Foreign Key কনফিগারেশন করার জন্য আপনি:
{ClassName}Id
)ধরা যাক, আমাদের একটি Student
এবং Course
টেবিল আছে এবং আমরা চাচ্ছি, Student
টেবিলের মধ্যে একটি CourseId
প্রপার্টি থাকবে, যা Foreign Key হিসেবে কাজ করবে।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int CourseId { get; set; } // Foreign Key
// Navigation Property
public Course Course { get; set; } // Navigation to Course
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
// Navigation Property
public ICollection<Student> Students { get; set; } // One-to-Many relationship
}
এখানে:
CourseId
একটি Foreign Key হিসেবে Student
টেবিলের মধ্যে যুক্ত হয়েছে।Course
একটি Navigation Property, যা Course
টেবিলের সাথে সম্পর্ক স্থাপন করে।আপনি Fluent API দিয়ে আরও কাস্টম ফ্লেক্সিবিলিটি সহ Foreign Key কনফিগার করতে পারেন।
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasOne(s => s.Course) // One-to-Many Relationship
.WithMany(c => c.Students)
.HasForeignKey(s => s.CourseId) // CourseId is the Foreign Key
.OnDelete(DeleteBehavior.Restrict); // Define delete behavior
}
এখানে:
HasOne(s => s.Course)
দিয়ে Student এবং Course এর মধ্যে সম্পর্ক স্থাপন করা হয়েছে।WithMany(c => c.Students)
দিয়ে এক Course অনেক Student-কে সম্পর্কিত করছে।HasForeignKey(s => s.CourseId)
দিয়ে CourseId
কে Foreign Key হিসেবে কনফিগার করা হয়েছে।OnDelete(DeleteBehavior.Restrict)
দিয়ে Cascade Delete বন্ধ করে দেওয়া হয়েছে, অর্থাৎ Course
ডিলিট করলে Student
ডিলিট হবে না।EF তে Foreign Key সম্পর্কের তিনটি প্রধান টাইপ রয়েছে:
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public int ProfileId { get; set; }
// Navigation Property
public Profile Profile { get; set; } // One-to-One relationship
}
public class Profile
{
public int ProfileId { get; set; }
public string Bio { get; set; }
// Navigation Property
public Employee Employee { get; set; } // One-to-One relationship
}
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
// Navigation Property
public ICollection<Employee> Employees { get; set; } // One-to-Many relationship
}
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public int DepartmentId { get; set; } // Foreign Key
// Navigation Property
public Department Department { get; set; }
}
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
// Navigation Property
public ICollection<Course> Courses { get; set; } // Many-to-Many relationship
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
// Navigation Property
public ICollection<Student> Students { get; set; }
}
Primary Key এবং Foreign Key কনফিগারেশন Entity Framework-এ ডেটাবেসের কাঠামো এবং সম্পর্কের সঠিক পরিচালনা নিশ্চিত করে। ডেটাবেসে সঠিক সম্পর্ক স্থাপন করে, EF আমাদের CRUD অপারেশনগুলিকে আরো কার্যকরী ও নিরাপদ করে তোলে। Data Annotations
এবং Fluent API
উভয়ই শক্তিশালী কনফিগারেশন টুল হিসেবে কাজ করে, যা ডেটাবেস সম্পর্কের জন্য নমনীয়তা এবং কাস্টমাইজেশন প্রদান করে।
common.read_more