Entity Framework - Data Annotation خصائص متقدمة [NotMapped]، [ConcurrencyCheck]، [Timestamp]، [Index].
8.8 Entity Framework - خصائص متقدمة [NotMapped]، [ConcurrencyCheck]، [Timestamp]، [Index]
بالإضافة إلى السمات الأساسية في Data Annotations، يوفر Entity Framework Core مجموعة من الخصائص المتقدمة التي تمنحنا تحكمًا إضافيًا في الكيانات وقواعد البيانات، مثل: [NotMapped]، [ConcurrencyCheck]، [Timestamp]، و[Index].
🔹 [NotMapped] - تجاهل الخاصية من التتبع
تُستخدم خاصية [NotMapped] لإعلام EF Core أن هذه الخاصية لا يجب أن يتم إنشاؤها كعمود في قاعدة البيانات.
using System.ComponentModel.DataAnnotations.Schema;
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public string ComputedValue { get; set; }
}
في هذا المثال، الخاصية ComputedValue ستظل موجودة داخل الكود ولكن لن يتم إنشاء عمود لها في قاعدة البيانات.
🔹 [ConcurrencyCheck] - التحقق من التزامن
تُستخدم خاصية [ConcurrencyCheck] لضمان أن السجل لم يتم تعديله بواسطة مستخدم آخر أثناء تعديلك له. إذا تغيرت القيمة في قاعدة البيانات أثناء تعديلك، سيتم إصدار استثناء (Exception).
using System.ComponentModel.DataAnnotations;
public class Product
{
public int Id { get; set; }
[ConcurrencyCheck]
public string Name { get; set; }
}
أي تعديل على الخاصية Name سيتم التحقق منه قبل الحفظ لضمان عدم وجود تعارضات.
🔹 [Timestamp] - استخدام الطابع الزمني لمراقبة التزامن
تُستخدم خاصية [Timestamp] لمراقبة التزامن باستخدام حقل بايت خاص (عادة ما يكون صفيف بايتات).
using System.ComponentModel.DataAnnotations;
public class Product
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
الخاصية RowVersion يتم تحديثها تلقائيًا مع كل تعديل، وأي محاولة لحفظ نسخة قديمة ستنتج عنها خطأ تزامن.
🔹 [Index] - إنشاء فهارس لتحسين الأداء
في الإصدارات الحديثة من EF Core (ابتداءً من EF Core 5.0)، يمكنك استخدام خاصية [Index] لإنشاء فهارس على الأعمدة لتحسين أداء الاستعلامات.
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
[Index(nameof(Name))]
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
هذا الكود سيُنشئ فهرس (Index) على عمود Name لتحسين سرعة البحث عليه.
🔹 الفرق بين [ConcurrencyCheck] و [Timestamp]
ConcurrencyCheck | Timestamp |
---|---|
يطبق التحقق على خصائص محددة. | يتتبع التغييرات على كامل السجل عبر حقل واحد. |
يتطلب مقارنة القيم عند الحفظ. | يتطلب مقارنة الطابع الزمني (RowVersion). |
🔹 الخلاصة
توفر السمات المتقدمة مثل [NotMapped]، [ConcurrencyCheck]، [Timestamp]، و[Index] أدوات قوية لضبط الكيانات بمرونة ودقة عالية، مما يساعد على تحسين الأداء، إدارة التزامن، وضبط بنية قاعدة البيانات بشكل احترافي.
تعليقات
إرسال تعليق