تعيين CreatedDate و ModifiedDate في ASP.NET Core MVC
لتحقيق هذا المطلوب في ASP.NET Core MVC، يمكنك استخدام خاصية [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
لكل من CreatedDate
و ModifiedDate
في نموذج Passage
. يُعتبر هذا الأمر إشارة لقاعدة البيانات بأنها يجب أن تقوم بتوليد القيم تلقائيًا عند إنشاء أو تعديل سجل.
لذا، يمكن تحديث نموذج Passage
ليبدو كالتالي:
-
مشكلة عدم تذكر آخر مجلد في CKFinder05/04/2024
-
تنفيذ عمليات الإرجاع في Java06/03/2024
-
بناء برنامج Java للبحث في مصفوفة29/02/2024
csharpnamespace 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.
-
القيم الافتراضية للتواريخ: يمكنك أيضًا تعيين قيم افتراضية للتواريخ في حال لم يتم تحديدها من قبل قاعدة البيانات. للقيام بذلك، يمكنك تعديل نموذج
Passage
ليشمل القيم الافتراضية:csharpnamespace 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; } }
-
تحديث التواريخ في حالة التعديل فقط: إذا أردت تحديث
ModifiedDate
فقط عند تعديل السجل دون تغييرCreatedDate
، فيمكنك استخدام الحدثBeforeSaveChange
في context الخاص بقاعدة البيانات لتحقيق ذلك. فيمكنك إضافة الكود التالي إلى context الخاص بك:csharppublic 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
في حالة التعديل. -
استخدام Timestamps بدلاً من التواريخ المحسوبة: يمكنك استخدام timestamp properties بدلاً من التواريخ المحسوبة في النموذج الخاص بك. لتحقيق ذلك، قم بتعديل نموذج
Passage
كالتالي:csharpnamespace 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 تعيين التواريخ تلقائيًا وفقًا للسيناريو الذي وصفته.