Entity Framework - Fluent API ضبط الجدااول والعلاقات

9.5 Entity Framework - ضبط الجداول والعلاقات باستخدام ToTable(), HasOne().WithMany(), HasMany().WithOne()

في Entity Framework Core باستخدام Fluent API، يمكننا ضبط أسماء الجداول (Tables) والتحكم الكامل بالعلاقات (Relationships) بين الكيانات بطريقة دقيقة ومنظمة. في هذا الدرس سنتعلم كيف نستخدم الدوال ToTable()، HasOne().WithMany()، وHasMany().WithOne().


🔹 ToTable() - تخصيص اسم الجدول

تُستخدم الدالة ToTable() لتحديد اسم الجدول في قاعدة البيانات بشكل صريح بدلاً من الاعتماد على اسم الكيان (Entity) بشكل افتراضي.


modelBuilder.Entity<Product>()
    .ToTable("tbl_Products");

هنا سيتم إنشاء أو ربط الكيان Product مع جدول اسمه tbl_Products في قاعدة البيانات.

🔹 HasOne().WithMany() - تعريف علاقة One-to-Many

تُستخدم لتعريف علاقة بين كيانين حيث أن كيانًا واحدًا يرتبط بالعديد من الكيانات الأخرى (مثل: كل Customer له العديد من Orders).

مثال عملي:


modelBuilder.Entity<Order>()
    .HasOne(o => o.Customer)
    .WithMany(c => c.Orders)
    .HasForeignKey(o => o.CustomerId);

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

  • كل Order مرتبط بواحد فقط Customer.
  • وكل Customer يمكن أن يكون لديه عدة Orders.
  • المفتاح الأجنبي ForeignKey هو CustomerId.

🔹 HasMany().WithOne() - تعريف علاقة Many-to-One

هذه الطريقة عكس HasOne().WithMany()، لكنها تحقق نفس الهدف من جهة الكيان الآخر.

مثال عملي آخر:


modelBuilder.Entity<Customer>()
    .HasMany(c => c.Orders)
    .WithOne(o => o.Customer)
    .HasForeignKey(o => o.CustomerId);

هنا نقول:

  • العميل Customer يملك العديد من الطلبات Orders.
  • وكل طلب Order مرتبط بعميل واحد Customer.

🔹 متى نستخدم HasOne().WithMany() ومتى HasMany().WithOne()؟

  • استخدم HasOne().WithMany() عندما تبدأ من الكيان الذي لديه علاقة واحدة.
  • استخدم HasMany().WithOne() عندما تبدأ من الكيان الذي لديه علاقات متعددة.
  • في النهاية النتيجة واحدة، الفرق فقط في زاوية البدء من أي كيان.

🔹 ضبط المفتاح الأجنبي Foreign Key

يمكنك تحديد المفتاح الأجنبي صراحة باستخدام HasForeignKey() كما رأينا في الأمثلة.


.HasForeignKey(o => o.CustomerId);

🔹 الخلاصة

باستخدام ToTable() يمكنك التحكم في أسماء الجداول، وباستخدام HasOne().WithMany() وHasMany().WithOne() يمكنك بناء علاقات دقيقة بين الكيانات بطريقة احترافية ومتماشية مع منطق الأعمال الخاص بتطبيقك.

تعليقات

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

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

1.1 SQL Introduction

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