البرمجة

تعيين CreatedDate و ModifiedDate في ASP.NET Core MVC

لتحقيق هذا المطلوب في ASP.NET Core MVC، يمكنك استخدام خاصية [DatabaseGenerated(DatabaseGeneratedOption.Computed)] لكل من CreatedDate و ModifiedDate في نموذج Passage. يُعتبر هذا الأمر إشارة لقاعدة البيانات بأنها يجب أن تقوم بتوليد القيم تلقائيًا عند إنشاء أو تعديل سجل.

لذا، يمكن تحديث نموذج Passage ليبدو كالتالي:

csharp
namespace Joukyuu.Models { using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Passage { [Key] public int PassageId { get; set; } public string Contents { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreatedDate { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime ModifiedDate { get; set; } } }

بهذا، يجب أن تُعين Entity Framework Core تلقائيًا القيم الصحيحة لـ CreatedDate و ModifiedDate عند إنشاء أو تعديل سجل في Passage.

المزيد من المعلومات

بالطبع، يمكنني توضيح المزيد من المعلومات حول كيفية تحقيق هذا السيناريو في ASP.NET Core MVC.

  1. القيم الافتراضية للتواريخ: يمكنك أيضًا تعيين قيم افتراضية للتواريخ في حال لم يتم تحديدها من قبل قاعدة البيانات. للقيام بذلك، يمكنك تعديل نموذج Passage ليشمل القيم الافتراضية:

    csharp
    namespace Joukyuu.Models { using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Passage { [Key] public int PassageId { get; set; } public string Contents { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreatedDate { get; set; } = DateTime.UtcNow; [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime ModifiedDate { get; set; } = DateTime.UtcNow; } }
  2. تحديث التواريخ في حالة التعديل فقط: إذا أردت تحديث ModifiedDate فقط عند تعديل السجل دون تغيير CreatedDate، فيمكنك استخدام الحدث BeforeSaveChange في context الخاص بقاعدة البيانات لتحقيق ذلك. فيمكنك إضافة الكود التالي إلى context الخاص بك:

    csharp
    public override int SaveChanges() { foreach (var entry in ChangeTracker.Entries()) { if (entry.Entity is Passage passage) { switch (entry.State) { case EntityState.Added: passage.CreatedDate = DateTime.UtcNow; passage.ModifiedDate = DateTime.UtcNow; break; case EntityState.Modified: passage.ModifiedDate = DateTime.UtcNow; break; } } } return base.SaveChanges(); }

    يتم فحص كل سجل قبل حفظ التغييرات، ويُعين ModifiedDate على DateTime.UtcNow في حالة التعديل.

  3. استخدام Timestamps بدلاً من التواريخ المحسوبة: يمكنك استخدام timestamp properties بدلاً من التواريخ المحسوبة في النموذج الخاص بك. لتحقيق ذلك، قم بتعديل نموذج Passage كالتالي:

    csharp
    namespace Joukyuu.Models { using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Passage { [Key] public int PassageId { get; set; } public string Contents { get; set; } [Timestamp] public byte[] CreatedDate { get; set; } [Timestamp] public byte[] ModifiedDate { get; set; } } }

    في هذه الحالة، ستقوم Entity Framework Core بتحديث الـ timestamp properties تلقائيًا عندما يتم تعديل السجل.

باستخدام أي من هذه الطرق، يجب على ASP.NET Core MVC تعيين التواريخ تلقائيًا وفقًا للسيناريو الذي وصفته.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر