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