پیاده‌سازی روابط چند به چند در EF Core

در آموزش پیاده‌سازی روابط چند به چند در EF Core، ابتدا مفهوم روابط چند به چند در پایگاه داده بررسی می‌شود. سپس نحوه پیاده‌سازی آن در EF Core با استفاده از جدول واسط (Join Table) و کلیدهای ترکیبی را یاد می‌گیریم. رابطه چند به چند یکی از انواع ارتباطات در مدل‌سازی داده‌هاست که زمانی اتفاق می‌افتد که دو موجودیت به گونه‌ای به هم مرتبط شوند که هر نمونه از موجودیت اول می‌تواند با چندین نمونه از موجودیت دوم ارتباط داشته باشد و بالعکس.

به عنوان مثال، در یک سیستم مدیریت آموزشی، یک دانشجو می‌تواند در چندین دوره ثبت‌نام کند و هر دوره نیز می‌تواند شامل چندین دانشجو باشد. این نوع رابطه معمولاً با استفاده از یک جدول واسط (Join Table) پیاده‌سازی می‌شود که نقش پل بین دو جدول اصلی را ایفا می‌کند و شامل کلیدهای خارجی مرتبط با هر دو جدول است. این جدول واسط امکان مدیریت ارتباطات پیچیده را فراهم می‌کند و به صورت خودکار یا دستی در پایگاه داده طراحی می‌شود.

رابطه چند به چند (Many-to-Many) نوعی ارتباط بین دو موجودیت است که در آن هر نمونه از یک موجودیت می‌تواند با چندین نمونه از موجودیت دیگر مرتبط باشد و برعکس. برای پیاده‌سازی این رابطه، معمولاً از یک جدول واسط استفاده می‌شود.

پیاده‌سازی روابط چند به چند در EF Core

پیاده‌سازی روابط چند به چند در EF Core

در چه زمانی از روابط چند به چند در EF Core استفاده کنیم؟

ارتباط چند به چند (Many-to-Many) زمانی استفاده می‌شود که بین دو موجودیت (Entity) رابطه‌ای وجود داشته باشد که هر نمونه از یک موجودیت می‌تواند با چندین نمونه از موجودیت دیگر مرتبط باشد و برعکس.

  • دانشجویان و دوره‌ها : یک دانشجو می‌تواند در چندین دوره ثبت‌نام کند و هر دوره نیز می‌تواند شامل چندین دانشجو باشد.
  • محصولات و سبد خرید : یک محصول می‌تواند در چندین سبد خرید قرار گیرد و هر سبد خرید نیز می‌تواند شامل چندین محصول باشد.

تعریف مدل ها

مدل Student

public class Student
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Family { get; set; }
public required string Email { get; set; }
public ICollection<StudentCourse>? StudentCourses { get; set; }
}

Course

public class Course
{
public int Id { get; set; }
public required string Name { get; set; }
public required int Credits { get; set; }
public ICollection<StudentCourse> StudentCourses { get; set; }= [];
}

مدل StudentCourse – جدول واسط (Join Table)

public class StudentCourse
{
public int StudentId { get; set; }
public int CourseId { get; set; }
public required Student Student { get; set; }
public required Course Course { get; set; }
}

تعریف ویو مدل ها

ویو مدل Student

public class StudentViewModel
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Family { get; set; }
public required string Email { get; set; }
}

ویو مدل Course

public class CourseViewModel
{
public int Id { get; set; }
public required string Name { get; set; }
public required int Credits { get; set; }
}

تنظیمات DbContext

public DbSet<Student> students { get; set; }
public DbSet<Course> courses { get; set; }
public DbSet<StudentCourse> StudentCourses { get; set; }

//--------------------------------------
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    //--------------------------------------
    modelBuilder.Entity<StudentCourse>()
        .HasKey(sc => new { sc.StudentId, sc.CourseId });

    //--------------------------------------
    modelBuilder.Entity<StudentCourse>()
        .HasOne(s => s.Student)
        .WithMany(s => s.StudentCourses)
        .HasForeignKey(s => s.StudentId)
        .OnDelete(DeleteBehavior.Cascade);

    //--------------------------------------
    modelBuilder.Entity<StudentCourse>()
        .HasOne(s => s.Course)
        .WithMany(s => s.StudentCourses)
        .HasForeignKey(s => s.CourseId)
        .OnDelete(DeleteBehavior.Cascade);
}
  • متد HasKey : یک متد در Fluent API است که برای تعیین کلید اصلی (Primary Key) یک موجودیت یا جدول استفاده می‌شود.
  • متد HasOne : یک متد است که برای تعریف یک رابطه یک به یک (One-to-One) یا یک طرف یک رابطه یک به چند (One-to-Many) استفاده می‌شود.
  • متد WithMany : یک متد است که برای تعریف طرف “چند” (Many) در یک رابطه یک به چند (One-to-Many) یا چند به چند (Many-to-Many) استفاده می‌شود.
  • متد HasForeignKey : یک متد است که برای تعریف کلید خارجی (Foreign Key) در یک رابطه استفاده می‌شود.
  • متد OnDelete : یک متد است که برای تعیین رفتار حذف (Delete Behavior) در یک رابطه استفاده می‌شود.

تنظیمات AutoMapper

CreateMap<Student,StudentViewModel>().ReverseMap();
CreateMap<Course, CourseViewModel>().ReverseMap();

مشاهده در آپارات یا یوتیوب

محتوای ویدیویی این صفحه در سایت قابل مشاهده است. اما اگر عادت دارید توی پلتفرم آپارات یا یوتیوب ویدیوها را مشاهده کنید، می‌توانید از دکمه‌های زیر استفاده کنید.

تماشای ویدیوی پیاده‌سازی روابط چند به چند در EF Core در آپارات و یوتیوب

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه پیاده‌سازی روابط چند به چند در EF Core در شبکه‌های اجتماعی

نظرات شما برای ما ارزشمند است

متاسفانه تاکنون پیامی برای این مطلب ثبت نشده است. شما اولین شخصی باشید که پیام می‌گذارد.

نظرات کاربران

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.