Entity Framework - علاقة متعدد إلى متعدد (Many-to-Many)
Entity Framework Core - علاقة متعدد إلى متعدد (Many-to-Many)
في علاقة متعدد إلى متعدد (Many-to-Many)، كل سجل في الجدول الأول يمكن أن يكون مرتبطًا بعدة سجلات في الجدول الثاني، والعكس صحيح.
---🔹 كيفية إنشاء علاقة Many-to-Many:
- إنشاء كلاسين يمثلان الجداول.
- تعريف مجموعة (Collection) من النوع الآخر داخل كل كلاس.
- منذ EF Core 5.0، يمكنك إنشاء العلاقة بدون الحاجة لجداول وسيطة يدوية (EF Core ينشئها تلقائيًا).
🔹 مثال عملي: علاقة بين Student وCourse:
1️⃣ كلاس Student:
// ملف Models/Student.cs
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
// كل طالب يمكن أن يدرس عدة كورسات
public ICollection<Course> Courses { get; set; }
}
---
2️⃣ كلاس Course:
// ملف Models/Course.cs
public class Course
{
public int Id { get; set; }
public string Title { get; set; }
// كل كورس يمكن أن يدرس بواسطة عدة طلاب
public ICollection<Student> Students { get; set; }
}
---
3️⃣ إعداد العلاقة باستخدام Fluent API (اختياري إذا أردت تخصيص الجدول الوسيط):
// داخل ملف ApplicationDbContext.cs
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.Courses)
.WithMany(c => c.Students)
.UsingEntity(j => j.ToTable("StudentCourses"));
base.OnModelCreating(modelBuilder);
}
---
🔹 شرح الكود:
- تعريف
ICollection<Course>
داخل Student يعني أن كل طالب يمكن أن يسجل في أكثر من كورس. - تعريف
ICollection<Student>
داخل Course يعني أن كل كورس يمكن أن يدرس بواسطة أكثر من طالب. - باستخدام
UsingEntity
قمنا بتحديد اسم الجدول الوسيط ليكون "StudentCourses".
🔹 ملاحظات مهمة:
- ✅ إذا لم تحدد جدول وسيط باستخدام Fluent API، EF Core سينشئ جدول وسيط تلقائيًا بالاسم الافتراضي.
- ✅ يمكنك تخصيص أسماء الحقول أو إضافة خصائص إضافية في الجدول الوسيط إذا احتجت.
✅ علاقات Many-to-Many شائعة جدًا، خصوصًا في التطبيقات التي تحتوي على اشتراكات، تسجيل مواد، أنظمة صلاحيات، وغيرها.
تعليقات
إرسال تعليق