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 تُستخدم بكثرة في قواعد البيانات مثل ربط الطلاب بالأقسام أو الطلبات بالعملاء.
تعليقات
إرسال تعليق