شروحات الكمبيوتر والإنترنت والموبايل

توليد GUID اختياري في DTO لكن مطلوب في قاعدة البيانات باستخدام HasDefaultValueSql

خلال تطوير التطبيقات باستخدام C#، قد تواجه تحديات تتعلق بتفاعل الكود مع قاعدة البيانات، حيث يكون لديك كائنات بيانات انتقالية (DTO) تحتوي على خصائص قد تكون اختيارية، في حين أن قاعدة البيانات تتطلب هذه القيم. من بين هذه القضايا الأكثر شيوعًا هي كيفية توليد GUID كمفتاح أساسي في قاعدة البيانات عندما يكون هذا المفتاح اختياريًا في DTO. في هذا المقال، سنستعرض كيفية استخدام HasDefaultValueSql لإنشاء GUID تلقائيًا، مما يسمح لك بتحقيق توازن بين قواعد البيانات والكود.

فهم المشكلة

عندما نعمل مع DTO ككائنات بيانات، قد نحتاج إلى إدراج قيم تحدد المعرفات الخاصة بكياناتنا. في حالة سيارة، قد يبدو التعريف كما يلي:

public class CarDto
{
    public Guid? Id { get; set; }
}

في هذا السياق، يكون Id خيارياً، حيث قد لا يتم توفيره أثناء عملية الإنشاء. ويتطلب العمود المقابل في قاعدة البيانات أن يكون معرّف السيارة GUID ولا يقبل القيم الفارغة، وبالتالي يجب أن يتم توليده بشكل تلقائي.

تحديد كيان EF

عندما نقوم بتعريف كيان Entity Framework، يبدو التعريف كالتالي:

public class Car
{
    public Guid Id { get; set; }
}

عند إعداد نموذج قاعدة البيانات باستخدام OnModelCreating، نقوم بتعريف الخاصية باستخدام HasDefaultValueSql لتحديد كيفية توليد قيمة GUID إذا لم يتم تقديمها:

modelBuilder.Entity<Car>()
    .Property(e => e.Id)
    .HasDefaultValueSql("NEWID()");

مشكلة القيم الافتراضية

تتمثل المشكلة الرئيسية في أن عملية التحويل من DTO إلى كائن قاعدة البيانات تؤدي إلى توليد معرف GUID فارغ في حالة عدم توفير القيمة. عند إجراء التحويل باستخدام:

var carToCreate = Mapper.Map(carDto);

فإن carToCreate.Id سيأخذ القيمة 00000000-0000-0000-0000-000000000000 بدلاً من توليد GUID جديد. يعود السبب في ذلك إلى أن قيمة Id ليست فارغة، وبما أن هناك قيمة موجودة، فإن HasDefaultValueSql لن يتعامل مع توليد قيمة جديدة.

الحلول الممكنة

للتغلب على هذه المشكلة، يجب أن نفكر في بعض الحلول المبتكرة. أحد الحلول هو التأكد من أن قيمة Id في DTO لا يتم تعيينها إلا إذا كانت غير موجودة. يمكن تحقيق ذلك من خلال التحقق من وجود القيمة عند تحويل DTO:

if (!carDto.Id.HasValue)
{
    carDto.Id = Guid.Empty; // استخدم قيمة فارغ
}

بهذا، سوف تتلقى قاعدة البيانات قيمة GUID جديدة عند عدم وجود قيمة، مما يجعل الدالة HasDefaultValueSql تعمل بشكل صحيح.

خاتمة

تعد إدارة المعرفات في قاعدة البيانات مع الأمور الاختيارية في DTO واحدة من القضايا التحديّة التي قد تواجهها عند العمل بـ C#. باستخدام HasDefaultValueSql، يمكنك جعل العملية أكثر سلاسة وكفاءة، مما يساعد على الحفاظ على تكامل البيانات. إذا كنت تواجه مشكلات في عملية تحويل DTO، فكر في مراجعة الشروط والعوامل المؤثرة في هذا التحويل، فقد يكون بإمكانك الوصول إلى الحل المناسب دون الحاجة إلى تغييرات جذرية في التصميم.

باستخدام الأساليب الصحيحة، يمكنك تجاوز هذه التحديات وجعل تجربتك في البرمجة أكثر سلاسة وإنتاجية. وإذا كنت تواجه تحديات مماثلة، يمكنك استخدام هذه المفاهيم لتحسين كيفية تعامل تطبيقك مع GUIDs في بيئة قواعد البيانات لديك.

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!

يستخدم موقعنا ملفات تعريف الارتباط لجمع معلومات حول زيارتك بهدف تحسين موقعنا (من خلال التحليل)، وعرض محتوى وسائل التواصل الاجتماعي والإعلانات ذات الصلة. يرجى الاطلاع على صفحة سياسة الخصوصية لمزيد من التفاصيل، أو الموافقة من خلال النقر على زر "قبول".

إعدادات ملفات تعريف الارتباط  

فيما يلي يمكنك اختيار نوع ملفات تعريف الارتباط التي تسمح بها على هذا الموقع. انقر على زر "حفظ إعدادات ملفات تعريف الارتباط" لتطبيق اختيارك.

ملفات ضرورية.يستخدم موقعنا ملفات تعريف الارتباط الوظيفية. هذه الملفات ضرورية لعمل موقعنا بشكل صحيح.

تحليل.يستخدم موقعنا ملفات تعريف الارتباط التحليلية لتمكيننا من تحليل موقعنا وتحسينه لأغراض مثل تحسين تجربة المستخدم.

وسائل التواصل الاجتماعي.يضع موقعنا ملفات تعريف الارتباط الخاصة بوسائل التواصل الاجتماعي لعرض محتوى من جهات خارجية مثل يوتيوب وفيسبوك. قد تقوم هذه الملفات بتتبع بياناتك الشخصية.

إعلانات.يضع موقعنا ملفات تعريف الارتباط الإعلانية لعرض إعلانات من جهات خارجية بناءً على اهتماماتك. قد تقوم هذه الملفات بتتبع بياناتك الشخصية.

أخرى.يضع موقعنا ملفات تعريف الارتباط من جهات خارجية أخرى ليست تحليلية أو خاصة بوسائل التواصل الاجتماعي أو الإعلانات.