One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক তৈরি

Association Mapping এবং Entity Relationships - এন হাইবারনেট (NHibernate) - Microsoft Technologies

267

NHibernate এর মাধ্যমে সম্পর্ক ভিত্তিক ডেটাবেসের সাথে কাজ করার জন্য One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক সেটআপ করা যেতে পারে। ORM (Object-Relational Mapping) ব্যবহার করে এই সম্পর্কগুলো তৈরি করা হয়, যেখানে একাধিক ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়, এবং NHibernate এগুলোকে সঠিকভাবে ডেটাবেসে ম্যাপ করে।

এখানে আমরা এই সম্পর্কগুলো তৈরি করার জন্য প্রয়োজনীয় ক্লাস মডেল এবং NHibernate এর ম্যাপিং কনফিগারেশন দেখব।


1. One-to-One সম্পর্ক তৈরি

One-to-One সম্পর্কের ক্ষেত্রে একটি অবজেক্টের সাথে আরেকটি অবজেক্টের একক সম্পর্ক থাকে। উদাহরণস্বরূপ, একজন Person এর একটি Passport থাকতে পারে, এবং প্রতিটি Passport একক Person এর সাথে যুক্ত থাকবে।

ক্লাস মডেল:

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Passport Passport { get; set; }
}

public class Passport
{
    public virtual int Id { get; set; }
    public virtual string PassportNumber { get; set; }
    public virtual Person Person { get; set; }
}

NHibernate Mapping (Fluent NHibernate):

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasOne(x => x.Passport).Cascade.All();  // One-to-One relationship
    }
}

public class PassportMap : ClassMap<Passport>
{
    public PassportMap()
    {
        Id(x => x.Id);
        Map(x => x.PassportNumber);
        References(x => x.Person).Unique();  // One-to-One relationship
    }
}

এখানে, Person ক্লাসে Passport অবজেক্টটি HasOne() এর মাধ্যমে One-to-One সম্পর্ক প্রতিষ্ঠা করেছে, এবং Passport ক্লাসে References() ব্যবহার করে এই সম্পর্ক নির্দেশ করা হয়েছে।


2. One-to-Many সম্পর্ক তৈরি

One-to-Many সম্পর্কের ক্ষেত্রে একটি অবজেক্টের সাথে অনেকগুলি অবজেক্টের সম্পর্ক থাকে। উদাহরণস্বরূপ, একজন Department এর অনেক Employee থাকতে পারে।

ক্লাস মডেল:

public class Department
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Employee> Employees { get; set; }

    public Department()
    {
        Employees = new List<Employee>();
    }
}

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Department Department { get; set; }
}

NHibernate Mapping (Fluent NHibernate):

public class DepartmentMap : ClassMap<Department>
{
    public DepartmentMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasMany(x => x.Employees).Cascade.All().Inverse();  // One-to-Many relationship
    }
}

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        References(x => x.Department);  // Many-to-One relationship
    }
}

এখানে, Department ক্লাসের Employees প্রপার্টি HasMany() এর মাধ্যমে One-to-Many সম্পর্ককে নির্দেশ করে। প্রতিটি Employee একটি Department এর সাথে সম্পর্কিত, যা References() এর মাধ্যমে ম্যাপ করা হয়েছে।


3. Many-to-Many সম্পর্ক তৈরি

Many-to-Many সম্পর্কের ক্ষেত্রে অনেক অবজেক্টের মধ্যে অনেক অবজেক্টের সম্পর্ক থাকে। উদাহরণস্বরূপ, একজন Student অনেক Course এ অংশগ্রহণ করতে পারে এবং প্রতিটি Course তে অনেক Student থাকতে পারে।

ক্লাস মডেল:

public class Student
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Course> Courses { get; set; }

    public Student()
    {
        Courses = new List<Course>();
    }
}

public class Course
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual IList<Student> Students { get; set; }

    public Course()
    {
        Students = new List<Student>();
    }
}

NHibernate Mapping (Fluent NHibernate):

public class StudentMap : ClassMap<Student>
{
    public StudentMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasManyToMany(x => x.Courses)
            .Cascade.All()
            .Inverse()  // Many-to-Many relationship
            .Table("Student_Courses");  // Join table
    }
}

public class CourseMap : ClassMap<Course>
{
    public CourseMap()
    {
        Id(x => x.Id);
        Map(x => x.Title);
        HasManyToMany(x => x.Students)
            .Cascade.All()
            .Table("Student_Courses");  // Join table
    }
}

এখানে, Student এবং Course ক্লাসের মধ্যে Many-to-Many সম্পর্ক স্থাপন করা হয়েছে। HasManyToMany() এবং Table() এর মাধ্যমে একটি Join Table (এক্ষেত্রে Student_Courses) তৈরি করা হয়েছে, যা Many-to-Many সম্পর্কের তথ্য ধারণ করে।


4. Join Table ব্যবহারের প্রয়োজনীয়তা

Many-to-Many সম্পর্কের ক্ষেত্রে Join Table ব্যবহারের প্রয়োজন হয়, কারণ দুটি টেবিলের মধ্যে সরাসরি সম্পর্ক স্থাপন করা সম্ভব নয়। এই টেবিলটি Student_Courses সম্পর্কের তথ্য সঞ্চয় করে।


সারাংশ

  • One-to-One সম্পর্কের ক্ষেত্রে একটির সাথে একটির সম্পর্ক থাকে।
  • One-to-Many সম্পর্কের ক্ষেত্রে একটির সাথে অনেকগুলোর সম্পর্ক থাকে।
  • Many-to-Many সম্পর্কের ক্ষেত্রে অনেকগুলোর সাথে অনেকগুলোর সম্পর্ক থাকে এবং Join Table ব্যবহার করা হয়।

এই তিনটি সম্পর্ক NHibernate এ তৈরি করার জন্য উপরে যে ক্লাস এবং ম্যাপিং দেখানো হয়েছে, তা দিয়ে ডেটাবেসে সঠিকভাবে সম্পর্ক তৈরি করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...