Entity Framework - علاقة واحد إلى متعدد (One-to-Many)

Entity Framework Core - علاقة واحد إلى متعدد (One-to-Many)

في علاقة واحد إلى متعدد (One-to-Many)، سجل واحد في الجدول الأول يمكن أن يكون مرتبطًا بعدة سجلات في الجدول الثاني، بينما كل سجل في الجدول الثاني مرتبط بسجل واحد فقط من الجدول الأول.

---

🔹 كيفية إنشاء علاقة واحد إلى متعدد:

  • إنشاء كلاسين يمثلان الجداول.
  • تعريف خاصية Navigation Property من الجانبين.
---

🔹 مثال عملي: علاقة بين Department وStudent:

1️⃣ كلاس Department:


// ملف Models/Department.cs

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

    // خاصية الملاحة: كل قسم يحتوي على عدة طلاب
    public ICollection<Student> Students { get; set; }
}
---

2️⃣ كلاس Student:


// ملف Models/Student.cs

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    // مفتاح أجنبي
    public int DepartmentId { get; set; }

    // خاصية الملاحة إلى القسم
    public Department Department { get; set; }
}
---

3️⃣ إعداد العلاقة باستخدام Fluent API داخل DbContext:


// داخل ملف ApplicationDbContext.cs

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>()
        .HasOne(s => s.Department)
        .WithMany(d => d.Students)
        .HasForeignKey(s => s.DepartmentId);

    base.OnModelCreating(modelBuilder);
}
---

🔹 شرح الكود:

  • كل قسم (Department) يمكن أن يحتوي على عدة طلاب (Students).
  • كل طالب مرتبط بقسم واحد فقط.
  • خاصية ICollection<Student> تمثل العلاقة المتعددة في Department.
  • خاصية Department داخل Student تمثل العلاقة إلى قسم واحد فقط.
---

🔹 ملاحظات مهمة:

  • ✅ وجود المفتاح الأجنبي (Foreign Key) داخل الكلاس Student أساسي لربط السجل بالقسم.
  • ✅ Fluent API يوفر لك دقة أكبر في تحديد تفاصيل العلاقة وربط المفاتيح الأجنبية.

✅ علاقة One-to-Many تُستخدم بكثرة في قواعد البيانات مثل ربط الطلاب بالأقسام أو الطلبات بالعملاء.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework