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

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

پیاده‌سازی روابط چند به چند در 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();

جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد