Entity Framework - Data Annotation التحكم بالعلاقات باستخدام [ForeignKey]، [InverseProperty].

8.7 Entity Framework - التحكم بالعلاقات باستخدام [ForeignKey] و[InverseProperty]

عند العمل مع علاقات الجداول (Tables Relationships) في Entity Framework Core، قد نحتاج أحيانًا لتحديد العلاقات بشكل صريح وواضح. هنا يأتي دور سمتي [ForeignKey] و[InverseProperty] لضبط العلاقات بين الكيانات (Entities) بطريقة دقيقة ومنظمة.


🔹 [ForeignKey] - تحديد المفتاح الأجنبي (Foreign Key)

تُستخدم خاصية [ForeignKey] لتحديد الخاصية التي تمثل المفتاح الأجنبي (Foreign Key) لربط كيان بكيان آخر.

مثال عملي:


using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class Order
{
    [Key]
    public int Id { get; set; }

    public int CustomerId { get; set; }

    [ForeignKey("CustomerId")]
    public Customer Customer { get; set; }
}

public class Customer
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
}

هنا الكلاس Order يحتوي على خاصية CustomerId، وتم ربطها صراحةً بالكلاس Customer باستخدام [ForeignKey].

🔹 [InverseProperty] - توضيح العلاقة العكسية

تُستخدم خاصية [InverseProperty] عندما تكون هناك أكثر من علاقة بين كيانين ونحتاج لتحديد العلاقة العكسية الدقيقة التي تربط الخصائص ببعضها.

مثال عملي:


using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
    [Key]
    public int Id { get; set; }

    [InverseProperty("Students")]
    public Course MainCourse { get; set; }

    [InverseProperty("OptionalStudents")]
    public Course OptionalCourse { get; set; }
}

public class Course
{
    [Key]
    public int Id { get; set; }

    public List<Student> Students { get; set; }
    public List<Student> OptionalStudents { get; set; }
}

في هذا المثال:

  • الخاصية MainCourse مرتبطة مع Students.
  • الخاصية OptionalCourse مرتبطة مع OptionalStudents.

باستخدام [InverseProperty] حددنا بوضوح كل علاقة بمقابلها، لتجنب الالتباس.

🔹 لماذا نستخدم [ForeignKey] و[InverseProperty]؟

  • لتوضيح العلاقات المعقدة خصوصًا عندما توجد علاقات متعددة بين كيانين.
  • لضمان توليد قاعدة بيانات دقيقة بدون أخطاء أو التباسات.
  • للحصول على استعلامات (Queries) وعلاقات (Navigations) أكثر وضوحًا وسهولة في الاستخدام.

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

  • يمكنك استخدام [ForeignKey] على الخاصية الملاحية (Navigation Property) أو على المفتاح الأجنبي نفسه.
  • إذا كنت لا تستخدم [InverseProperty] مع علاقات متعددة، قد يخطئ EF Core في تحديد العلاقات تلقائيًا.

🔹 الخلاصة

تساعدك سمتي [ForeignKey] و[InverseProperty] في بناء علاقات دقيقة ومنظمة بين الكيانات في Entity Framework Core، مما يجعل التطبيق أكثر استقرارًا وسهولة في التعامل مع البيانات والعلاقات المعقدة.

تعليقات

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

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

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