Entity Framework - Fluent API 0 التحكم في خصائص الأعمدة باستخدام

9.4 Entity Framework - التحكم في خصائص الأعمدة باستخدام HasMaxLength(), IsRequired(), HasColumnName(), HasDefaultValue()

باستخدام Fluent API في Entity Framework Core، يمكنك التحكم الكامل في خصائص الأعمدة (Columns) داخل الجداول. توفر لك Fluent API وظائف مثل HasMaxLength()، IsRequired()، HasColumnName()، وHasDefaultValue() لضبط كل تفاصيل العمود بطريقة احترافية.


🔹 HasMaxLength() - تحديد الطول الأقصى للنصوص

تُستخدم لتحديد الحد الأقصى لعدد الأحرف التي يمكن تخزينها في عمود نصي (String Column).


modelBuilder.Entity<Product>(entity =>
{
    entity.Property(p => p.Name)
          .HasMaxLength(100);
});

هنا لن يقبل العمود أكثر من 100 حرف داخل الخاصية Name.

🔹 IsRequired() - جعل العمود إلزاميًا (NOT NULL)

تُستخدم لجعل العمود لا يقبل القيم الفارغة (Null) ويصبح مطلوبًا في قاعدة البيانات.


modelBuilder.Entity<Product>(entity =>
{
    entity.Property(p => p.Name)
          .IsRequired();
});

بهذا الشكل، العمود Name لن يقبل قيمًا فارغة وسيكون NOT NULL.

🔹 HasColumnName() - تغيير اسم العمود

تُستخدم لتحديد اسم مخصص للعمود بدلاً من الاعتماد على اسم الخاصية.


modelBuilder.Entity<Product>(entity =>
{
    entity.Property(p => p.Name)
          .HasColumnName("Product_Name");
});

هنا سيتم إنشاء العمود في قاعدة البيانات بالاسم Product_Name بدلاً من Name.

🔹 HasDefaultValue() - تعيين قيمة افتراضية للعمود

تُستخدم لتحديد قيمة افتراضية يتم استخدامها عند عدم تحديد قيمة للعمود أثناء الإدخال.


modelBuilder.Entity<Product>(entity =>
{
    entity.Property(p => p.IsAvailable)
          .HasDefaultValue(true);
});

هنا إذا لم يتم تحديد قيمة للخاصية IsAvailable، سيتم تخزين القيمة الافتراضية true.

🔹 الجمع بين أكثر من إعداد معًا

يمكنك ربط أكثر من عملية ضبط على نفس الخاصية باستخدام أسلوب الـ Fluent Style:


modelBuilder.Entity<Product>(entity =>
{
    entity.Property(p => p.Name)
          .IsRequired()
          .HasMaxLength(100)
          .HasColumnName("Product_Name");
});

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

  • يفضل دائمًا تحديد HasMaxLength للحقول النصية لتحسين أداء قواعد البيانات.
  • تحديد IsRequired مهم جدًا عندما تكون القيم ضرورية لتكامل الأعمال (Business Logic).
  • تغيير اسم العمود باستخدام HasColumnName لا يؤثر على الكود الداخلي بل يؤثر فقط على تصميم قاعدة البيانات.
  • تعيين القيم الافتراضية بواسطة HasDefaultValue يسهل عمليات الإدخال ويوفر قيمة مضمونة في حالة عدم التحديد.

🔹 الخلاصة

استخدام HasMaxLength()، IsRequired()، HasColumnName()، وHasDefaultValue() في Fluent API يمنحك تحكمًا كاملاً ودقيقًا في كيفية إنشاء الأعمدة في قاعدة البيانات، مما يساعد على تحسين الأداء، الحفاظ على سلامة البيانات، وتسهيل التعامل مع البنية.

تعليقات

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

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

1.1 SQL Introduction

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